MongoDB中各种常用管道操作符的功能描述: $project:修改文档的结构(重命名、增加或删除域),也可以用于创建计算结果以及嵌套文档。 $match:过滤数据,只输出符合条件的文档。 $limit:限制MongoDB聚合管道返回的文档数。 $skip:在聚合管道中跳过指定数量的文档。 $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $group:将集合中的文档分组,可用于统计结果。 $sort:文档排序输出。 $geoNear:输出接近某一地理位置的有序文档。
$lt: <
$lte: <=
$gt: >
$gte: >=
$match match可以对文档进行筛选,类似于指定某个条件进行查询 通常我们都把match放在管道的前面,这样可以相对减少管道后面的计算量 如: db.user_nearby.aggregate({$match:{userId:”1749”}}) 注意”1749”,有引号的。
$project project用于提取某一个或多个特定的字段,也可以屏蔽显示某一个或多个字段 只提取userId字段,默认会包含_id字段: db.user_nearby.aggregate({$project:{userId:1}}) 如果不需要_id字段,则把_id设为0,1表示显示这个字段,0表示不显示: db.user_nearby.aggregate({$project:{userId:1,_id:0}}) 对userId字段进行重命名,重命名后,字段对应索引将会失效 db.user_nearby.aggregate({$project:{“usernew”:”$userId”,_id:0}})
$project还可以集合运算符,进行数学表达式的计算。 数学表达式: $add add可以对字段进行相加,只适用于数字类型,total这儿可以自定义,只是一个名字 db.num.aggregate({$project:{total:{$add:[“$x”,”$y”,”z”]}}})
$subtract
比较字段大小,对字段做减法,可以减成负数.只能对两个字段进行操作
db.num.aggregate({$project:{total:{$subtract:["$y","$z"]}}})
$multiply
乘积运算,可以对多个字段进行运算
db.num.aggregate({$project:{result:{$multiply:["$x","$y","$z"]}}})
$divide
除法运算,第一个除以第二个,只接受两个参数
db.add.aggregate({$project:{result:{$divide:["$x","$y"]}}})
$mod
取模运算,也叫求余运算,只能对两个字段进行操作
db.num.aggregate({$project:{result:{$mod:["$x","$y"]}}})
举例如下:
db.groups.aggregate({$project:{_id:0,result:{$divide:[“$validTime”,10000000]}}}) #groups表中的$validTime字段除以10000000,得出结果为result,_id:0不显示_id字段
db.groups.aggregate([{$match:{“validTime”:{$ne:null}}},{$project:{result:{$divide:[“$validTime”,10000000]}}}]) #$ne:null是不为空,如果是”validTime”:null,则条件就是为空。整句的意思就是如果validTime不为空,则进行一个除的运算。result这里只是一个名称,可以随便指定。
(1)管道的是具有先后顺序的。 (2)$group操作目前是在内存中处理的,因此,不能对大量的文档进行使用该种方式进行分组操作; (3)使用$unwind对数组中的字段值进行拆分时需要注意不能忘记写$符号,如{$unwind:”$tags”},tags字段前面有个$号; (4)MongoDB 24.对内存做了优化,如果$sort出现在$limit之前,$sort只会对前$limit个文档进行操作,在内存中也只会保留前$limit个文档,节省了内存 (5)$sort操作是在内存中进行的,如果其占有的内存超过物理内存的10%,程序会产生错误 (6)管道的输出结果大小不能大于16M,超过会出现错误。 (7)如果一个管道操作符在执行过程中所占用的内存超过系统内存容量的10%,则会报错; (8)聚合管道可以提供很好的性能和一致的接口,使用起来比较简单,对于一些简单的固定的聚集操作可以使用管道,但是对于一些复杂的、大量数据集的聚合任务还是使用MapReduce。
管道查询的相关链接: https://blog.csdn.net/u012702547/article/details/81874130
![]() |
![]() |