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> //形成的数组的新名称
    }
}

 

posted @ 2021-01-18 15:34  关山难越谁悲失路之人  阅读(166)  评论(0)    收藏  举报