正文开始前,首先须要表名几条定义:数组
聚合(aggregate)是基于数据处理的聚合管道,每一个文档经过一个由多个阶段(stage)组成的管道,能够对每一个阶段的管道进行分组、过滤等功能,而后通过一系列的处理,输出相应的结果spa
语法:db.集合名称.aggregate({管道:{表达式}})blog
$project是经常使用的管道命令之一:修改输⼊⽂档的结构,如重命名、增长、删除字段、建立计算结果文档
$push是经常使用的表达式之一:在结果⽂档中插⼊值到⼀个数组中,数据透视语法
接下来用这个集合做为事例来分析两者的区别: im
> db.car.find()
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30f8"), "carname" : "大众", "color" : "red", "price" : 120 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30f9"), "carname" : "奔弛", "color" : "bule", "price" : 400000 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fa"), "carname" : "宝马", "color" : "green", "price" : 300000 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fb"), "carname" : "奔弛", "color" : "red", "price" : 600000 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fc"), "carname" : "大众", "color" : "yellow", "price" : 100 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fd"), "carname" : "大众", "color" : "yellow", "price" : 120 }d3
$project:命名
db.car.aggregate(
{$project:{_id:0,carname:1}}
)数据
//_id字段默认为1是显示状态,不需显示用0表示, 其余字段默认为不显示db
显示效果为:
$push:
db.car.aggregate(
{$group:{_id:null,name:{$push:'$carname'}}}
)
//_id:null 表示不指定分组的字段
显示效果为: