Mongo常用聚合管道步骤
1、$project
指定包含的字段,隐藏id字段,添加新的字段
{
$project: {
"_id":0, //隐藏id字段
"Name":1, //查询字段信息
"xingbie":"$Sex", //查询字段信息,并且给查询到的信息取个别名
"info":["$Name","$Sex"] //把Name和Sex的值组成一个数组,并赋值给info
}
}
2、$match
筛选文档,仅将符合条件的文档传递到下一个管道中
大于:gt 大于等于:gte
小于:lt 小于等于:lte
等于:eq 不等于:ne
在...里:in 不在...里:nin
或者:or 并且:and
{$match: {Sex : "男", }} //筛选Sex为男的记录
{$match: {Sex : "男", Age: { $lt: 30 }}} //筛选Sex为男,并且Age小于30的记录。match中存在多个筛选条件的时候,这些条件需要被同时满足
{$match: { status: { $in: [ "P", "D" ] }}} //筛选status状态为P或者D的记录
{$match: {$or:[{status:"A"},{"Age":{$lt:30}}]}} //筛选status为A或者Age小于30的记录。or:满足其中一个条件就可以的
3、$unwind
把数组字段差分成多条,每条包含数组中的一个值。数组中有几个元素,就会被拆分成几条记录
{
$unwind:{
path: <field path>, //必填。数组字段的字段路径,需要加上$
includeArrayIndex: <string>, //选填。新加的字段,用来存储数组中的索引
preserveNullAndEmptyArrays: <boolean> //选填。true:空数组会显示出来;false:空数组不会显示出来。默认为false
}
}
4、$group
把集合中的文档分组,便于结果统计
{$group: {_id:"$字段名"}} //消除重复的字段值
{$group: {_id:null,Num:{$sum:1}}} //统计记录总数,把结果赋值给Num
{$group: {_id:"$Sex",name:{$push:"$Name"}}} //根据Sex来分组,并将Sex值相同的Name值聚合到一起,赋值给name变量
5、$sort
排序
升序:1 降序:-1
{$sort: {Age:1}} //按照年龄升序排序
6、$lookup
对同一个数据库中的另一个集合进行左外连接。左连接查询
{
$lookup:{
from: <collection to join>, //同一个数据库中需要被连接的数据集
localField: <field from the input documents>, //原始文档的字段
foreignField: <field from the documents of the "from" collection>, //被连接的数据集中的字段
as: <output array field> //形成的数组的新名称
}
}