数据库操作
创建数据库
在 MongoDB 中,使用 use 命令并且插入一条数据,就可以完成创建一个数据库了。
删除数据库
使用 db.dropDatabase() 删除数据库。
集合操作
创建集合
在 MongoDB 中,当插入文档时会自动的创建集合。
使用 createCollection 方法显式的创建集合。
1 | db.createCollection(name, options) |
options 可以是如下参数:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
删除集合
使用 db.COLLECTION_NAME.drop() 删除集合。
文档操作
MongoDB 针对文档,同样支持增删改查操作,这里特别说明一下查询文档。
查询文档
使用 db.COLLECTION_NAME.find 方法查询文档,find 内部可以填写查询条件。如果需要以易读的方式来读取数据,可以使用 pretty() 方法。如:
1 | db.col.find({ |
查询条件操作符
查询条件过滤操作符如下:
操作 | 格式 | 范例 | SQL 语句 |
---|---|---|---|
等于 | {<key>:<value> } |
db.col.find({"by":"xxx"}).pretty() |
where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
也可以利用 $type 检索类型,如 {<key>:{$type:'string'}}
。
分页查询
MongoDB 中使用 limit 方法和 skip 方法进行分页查询。
1 | db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) |
排序
使用 sort 方法进行排序,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
1 | db.COLLECTION_NAME.find().sort({KEY:1}) |
聚合操作
MongoDB 中聚合的方法使用 aggregate 方法,基本语法格式如下:
1 | 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”}}}]) |
管道
在 MongoDB 中有管道的概念,MongoDB 的聚合管道将 MongoDB 文档在一个管道处理完毕后将结果传递给下一个管道处理。有以下几个管道操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
举个例子:
1 | db.articles.aggregate( [ |