目录

什么是MongoDB?

MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是基于分布式文件存储的数据库,由C++语言编写。MongoDB是一个高性能,开源,无模式文档型数据库。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。有非常强大的查询功能,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。

MongoDB 初体验

MongoDB中的一条记录就是一个文档,是一个数据结构,由字段和值对组成。MongoDB文档与JSON对象类似。字段的值有可能包括其它文档、数组以及文档数组。

MongoDB 初体验

MongoDB的适合对大量或者无固定格式的数据进行存储,比如:日志、缓存等。对事务支持较弱,不适用复杂的多文档(多表)的级联查询,速度比传统数据库的快百倍。文中演示MongoDB版本为3.4,Windows10 环境下。

安装

安装略。

运行

创建数据目录

MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下((如: C:\ 或者 D:\ 等 )。
在本教程中,我们已经在 D 盘安装了 mongodb,现在让我们创建一个 data 的目录然后在 data 目录里创建 db 目录。

d:\>cd d:\

d:\>mkdir data

d:\>cd data

d:\data>mkdir db

d:\data>cd db

d:\data\db>

命令行下运行 MongoDB 服务器

d:\env\MongoDB\Server\3.4\bin\mongod --dbpath d:\data\db

ps:d:\env\MongoDB\Server\3.4\bin 是我的安装路径

启动MongoDB

要启动 MongoDB,请运行 mongod.exe 。

例如,从命令提示符:

D:\env\MongoDB\Server\3.4\bin\mongod.exe"

配置 MongoDB 服务

管理员模式打开命令行窗口

创建目录,执行下面的语句来创建数据库和日志文件的目录

mkdir d:\data\db
mkdir d:\data\log

创建配置文件

创建一个配置文件。该文件必须设置 systemLog.path 参数,包括一些附加的配置选项更好。

例如,创建一个配置文件位于 D:\env\MongoDB\mongod.cfg,其中指定 systemLog.path 和 storage.dbPath。具体配置内容如下:

systemLog:
    destination: file
    path: c:\data\log\mongod.log
storage:
    dbPath: c:\data\db

安装 MongoDB服务

通过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。

"D:\env\MongoDB\Server\3.4\bin\mongod.exe" --config "D:\env\MongoDB\mongod.cfg" --install

要使用备用 dbpath,可以在配置文件(例如:D:\env\MongoDB\mongod.cfg)或命令行中通过 --dbpath 选项指定。

如果需要,您可以安装 mongod.exemongos.exe 的多个实例的服务。只需要通过使用 --serviceName--serviceDisplayName 指定不同的实例名。只有当存在足够的系统资源和系统的设计需要这么做。

启动MongoDB服务

net start MongoDB

关闭MongoDB服务

net stop MongoDB

移除MongoDB服务

"D:\env\MongoDB\Server\3.4\bin\mongod.exe" --remove

命令行下运行 MongoDB 服务器 和 配置 MongoDB 服务 任选一个方式启动就可以。

MongoDB 后台管理 Shell

如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo.exe文件,MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。

当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):

> mongo
MongoDB shell version: 3.0.6
connecting to: test
……

由于它是一个JavaScript shell,您可以运行一些简单的算术运算:

> 2 + 2
4
>

db 命令用于查看当前操作的文档(数据库):

> db
test
>

常用命令

数据库

1.显示数据库列表:

>show dbs

2.显示当前数据库中的集合(类似关系数据库中的表):

>show collections

3.显示当前数据库中用户:

>show users

4.切换当前数据库,这和MS-SQL里面的意思一样,如果没有该数据库,则直接创建。

>use <db name>

新创建的数据库使用show dbs后是不会显示出来的,要显示数据库,需要至少插入一个文档。

db.items.insert({"name":"flicker"})

5.显示当前所在数据库

>db

6.删除当前所在的数据库

>db.dropDatabase()

集合

1.创建一个名为notemi的集合

>db.createCollection("notemi")

MongoDB 中,不需要创建集合。当插入一些文档时,MongoDB 也会自动创建集合。

>db.flicker.insert({"name" : "flicker"})
>show flicker
notemi
flicker
>

2.查看该库中所有的集合

>show collections

3.删除该库中名为notemi的集合

>db.notemi.drop()

文档

1.插入文档:

>db.COLLECTION_NAME.insert(document)

>db.mycol.insert({
   _id: 100,
   title: '标题', 
   description: '描述',
   by: 'Flicker',
   url: 'http://notemi.cn',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100,
})

2.将单个文档插入到集合中:

>db.collection.insertOne()

>db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

3.将多个文档插入到集合中:

db.collection.insertMany()

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])

4.将以非结构化的方式显示所有文档

>db.COLLECTION_NAME.find(document)

5.以格式化的方式显示结果

>db.mycol.find().pretty()

一些查询语句:

MongoDB 初体验

MongoDB中的AND操作符:

在find()方法中,如果通过使用","将它们分开传递多个键,则 MongoDB 将其视为AND条件。

>db.mycol.find(
   {
      $and: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

在要根据OR条件查询文档,需要使用$or关键字。

>db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

6.更新操作

>db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New Update MongoDB Overview'}})

7.删除文档

>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

>db.mycol.find({}, {'_id':1, 'title':1})

MongoDB还有很多高级特性,在以后的文章中再来慢慢讲吧。