1. 安装
在mongodb官网下载对应自己电脑系统的安装包,地址为: http://www.mongodb.org/downloads。
1、以Windows64bit为例,下载.msi文件双击安装。
2、安装过程中,点击 “Custom(自定义)” 按钮来设置安装目录(D:\MongoDB\bin)。
3、创建数据目录(D:\MongoDB\data\db),MongoDB默认数据目录\data\db。
4、连接数据库(命令行win+r cmd,到D:\MongoDB\bin目录下,执行代码:mongod –dbpath D:\MongoDB\data\db)
1 | D: |
5、启动 MongoDB JavaScript 工具(D:\MongoDB\bin目录下,打开mongo,会看到:)
1 | MongoDB shell version: 3.2.4 //mongodb版本 |
此时就可以操作数据库了。
2. 将MongoDB服务器作为Windows服务运行
1、在D:\MongoDB目录下创建mongodb.config,写入如下:
1 | ## 数据库文件目录 |
2、常规命令(cmd管理员):
1 | D: |
3、若常规方式失败,则sc方式(cmd管理员):
1 | D: |
访问地址:localhost:27017测试是否启动成功
3. CRUD操作(Creat,Read,Update,Delete)
3.1 MongoDB基础
1、document(文档)
MongoDB把所有数据存放在类似于JSON数据结构的文档内:
1 | { "item": "pencil", "qty": 500, "type": "no.2" } |
2、collection(集合)
集合是一组相关的文档,MongoDB存储所有的文档在集合里,他们拥有一套共享的通用索引。
1 | { "item": "pencil", "qty": 500, "type": "no.1" } |
3、database(数据库)
MongoDB的默认数据库为”db”,该数据库存储在data目录中。一个mongodb中可以建立多个数据库。
3.2 数据库操作:
连接及运行mongoDB
“show dbs
“命令可以显示所有的数据的列表
“db
“命令可以显示当前数据库对象或集合
“use
“命令可以连接到一个指定的数据库
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
1.不能是空字符串(””)。
2.不得含有’ ‘(空格)、.、$、/、\和\0 (空宇符)。
3.应全部小写。
4.最多64字节。
1、创建数据库:use Database_Name
1 | use test ##创建名为test的数据库 |
2、删除当前数据库:
1 | db.dropDatabase() |
3.3 文档操作(以 Collection_Name = col 为例)
3.3.1插入:
1 | db.col.insert(Document) ##插入一条或多组数据 |
3.3.2 删除:
1 | db.col.remove({}) ##删除所有数据 |
3.3.3 更新:
1 | db.col.update(query, update <,options>) |
insert 与 save的区别
如果插入的数据的_id相同,save将会更新该文档,而insert将会报错
update常用操作符
1 | $set ##当文档中包含该字段的时候,更新该字段,如果该文档中没有该字段,则为本文档添加一个字段. |
3.4 查询
1 | db.col.find({}) ##查询所有文档 |
3.4.1 深入查询表达式
1 | db.col.find()##查询所有 |
3.4.2 group分组查询
group做的聚合有些复杂。先选定分组所依据的键,此后MongoDB就会将集合依据选定键值的不同分成若干组。然后可以通过聚合每一组内的文档,产生一个结果文档。
1 | group({ |
其中key下的字段代表,需要按哪个字段分组.
initial下的变量表示这一个分组中会使用的变量,并且给一个初始值.可以在后面的$reduce函数中使用.
$reduce的两个参数,分别代表当前的文档和上个文档执行完函数后的结果.
栗子:如下我们按年龄分组,同级不同年龄的用户的多少:
1 | db.user.find() |
另外本函数还有两个可选参数 condition 和 finalize
condition就是分组的条件筛选类似mysql中的having
1 | db.user.group({ |
3.4.3 count统计
1 | db.goods.count() ##统计该集合总数 |
3.4.4 distinct排重
1 | db.user.find() |
3.4.5 子文档查询$elemMatch
elemMatch投影操作符将限制查询返回的数组字段的内容只包含匹配elemMatch条件的数组元素。
注意:
(1)数组中元素是内嵌文档。
(2)如果多个元素匹配$elemMatch条件,操作符返回数组中第一个匹配条件的元素。
假设集合school有如下数据:
1 | { |
下面的操作将查询邮政编码键值是63109的所有文档。 $elemMatch操作符将返回 students数组中的第一个匹配条件(内嵌文档的school键且值为102)的元素。
1 | db.school.find({zipcode: 63109 },{ students: { $elemMatch: { school: 102 } } } ); |
查询结果说明:_id为1的文档
,students数组包含多个元素中存在school键且值为102的元素,$elemMatch只返回一个匹配条件的元素。_id为3的文档
,因为students数组中元素无法匹配$elemMatch条件,所以查询结果不包含”students”字段。
$elemMatch可以指定多个字段的限定条件,下面的操作将查询邮政编码键值是63109的所有文档。 $elemMatch操作符将返回 students数组中的第一个匹配条件(内嵌文档的school键且值为102且age键值大于10)的元素。
1 | db.school.find( { zipcode: 63109 },{ students: { $elemMatch: { school: 102, age: { $gt: 10} } } } ); |