0%

MongoDB常用命令

官方文档

https://docs.mongodb.com/manual/crud/

数据库

新建数据库

1
2
#如果数据库不存在,则创建数据库,否则切换到指定数据库。
use DATABASE_NAME

查看所有数据库

1
show dbs

删除数据库

1
db.dropDatabase()

查看数据库版本

1
db.version()

集合

创建集合

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 : (可选)如果设为 true1,则只删除一个文档,如果不设置该参数,或使用默认值 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.getIndexes()

查看集合索引大小

1
db.col.totalIndexSize()

删除索引

1
db.col.dropIndexes()

删除集合指定索引

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
# --host <:port>, -h <:port>:MongoDB所在服务器地址
# --db , -d :需要恢复的数据库实例
# --drop:恢复的时候,先删除当前数据,然后恢复备份的数据
# <path>:mongorestore 最后的一个参数,设置备份数据所在位置
# --dir:指定备份的目录。
你不能同时指定 <path>--dir 选项。
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"}}
}
])