官方文档
https://docs.mongodb.com/manual/crud/
数据库
新建数据库
1 2
| #如果数据库不存在,则创建数据库,否则切换到指定数据库。 use DATABASE_NAME
|
查看所有数据库
删除数据库
查看数据库版本
集合
创建集合
1 2 3 4 5 6 7
| # name: 要创建的集合名称 # options: 可选参数, 指定有关内存大小及索引的选项 # capped: 布尔、可选。true 指定集合大小,size必填。当达到最大值时,它会自动覆盖最早的文档 # autoIndexId: 布尔、可选。true 自动在 _id 字段创建索引。默认为 false。 # size: 数值、可选 为固定集合指定一个最大值,以千字节计(KB)。 # max: 数值、可选 指定固定集合中包含文档的最大数量。 db.createCollection(name, options)
|
查看已有集合
1 2 3
| show collections # or show tables
|
删除集合
1
| db.COLLECTION_NAME.drop()
|
文档
插入文档
1 2 3 4 5
| db.COLLECTION_NAME.insert(document) # 向指定集合中插入一条文档数据 db.collection.insertOne() # 向指定集合中插入多条文档数据 db.collection.insertMany()
|
实例
1 2 3 4 5 6 7
| db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
|
更新文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # query : update的查询条件,类似sql update查询内where后面的。 # update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 # upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 # multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 # writeConcern :可选,抛出异常的级别。 db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 新增 db.col.insert({ title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) # 更新 db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) # 查询 db.col.find().pretty()
|
删除文档
1 2 3 4 5 6 7 8 9 10
| # query :(可选)删除的文档的条件。 # justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。 # writeConcern :(可选)抛出异常的级别。 db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
|
查询文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # query :可选,使用查询操作符指定查询条件 # projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。 db.collection.find(query, projection)
# AND db.col.find({key1:value1, key2:value2}).pretty()
# OR db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } )
|
模糊查询
1 2 3 4 5 6
| # 查询 title 包含"教"字的文档: db.col.find({title:/教/}) # 查询 title 字段以"教"字开头的文档: db.col.find({title:/^教/}) # 查询 titl e字段以"教"字结尾的文档: db.col.find({title:/教$/})
|
条件操作符
MongoDB |
操作符 |
说明 |
$gt |
> |
greater than |
$gte |
>= |
greater than equal |
$lt |
< |
less than |
$lte |
<= |
less than equal |
$ne |
!= |
not equal |
$eq |
= |
equal |
limit与skip方法(分页)
1 2 3
| # limit 该参数指定从MongoDB中读取的记录条数 # skip 跳过指定数量的数据 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
|
排序
1 2
| # KEY 排序字段 1升序 -1降序 db.COLLECTION_NAME.find().sort({KEY:1})
|
索引
创建索引
1
| db.collection.createIndex(keys, options)
|
Parameter |
Type |
Description |
background |
Boolean |
建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 |
unique |
Boolean |
建立的索引是否唯一。指定为true创建唯一索引。默认值为false。 |
name |
string |
索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
sparse |
Boolean |
对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false。 |
expireAfterSeconds |
integer |
指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v |
index version |
索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights |
document |
索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language |
string |
对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语。 |
language_override |
string |
对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language。 |
查看索引
查看集合索引大小
删除索引
删除集合指定索引
1
| db.col.dropIndex(INDEX_NAME)
|
聚合
1 2
| # 要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。 db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
|
表达式 |
描述 |
实例 |
$sum |
计算总和 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg |
计算平均值 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min |
获取集合中所有文档对应值得最小值 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max |
获取集合中所有文档对应值得最大值 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push |
在结果文档中插入值到一个数组中 |
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet |
在结果文档中插入值到一个数组中,但不创建副本 |
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first |
根据资源文档的排序获取第一个文档数据 |
db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last |
根据资源文档的排序获取最后一个文档数据 |
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
备份与恢复
备份
1 2 3 4
| # -h:MongDB所在服务器地址 # -d:需要备份的数据库实例 # -o:备份的数据存放位置 mongodump -h dbhost -d dbname -o dbdirectory
|
恢复
1 2 3 4 5 6 7
| # # # # <path>:mongorestore 最后的一个参数,设置备份数据所在位置 # 你不能同时指定 <path> 和 mongorestore -h <hostname><:port> -d dbname <path>
|
关联查询
检验结果、检验报告关联查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| db.testResult.aggregate([ { $match:{"testItemCode":"862"} }, { $lookup: { from: "testReport", localField: "reportNo", foreignField: "reportNo", as: "test" } }, { $match:{"test.reportDate": {"$gt":"2019-03-10 00:00:00"}} } ])
|