正文開始前,首先需要表名幾條定義:
聚合(aggregate)是基於數據處理的聚合管道,每個文檔通過一個由多個階段(stage)組成的管道,可以對每個階段的管道進行分組、過濾等功能,然后經過一系列的處理,輸出相應的結果
語法:db.集合名稱.aggregate({管道:{表達式}})
$project是常用的管道命令之一:修改輸⼊⽂檔的結構,如重命名、增加、刪除字段、創建計算結果
$push是常用的表達式之一:在結果⽂檔中插⼊值到⼀個數組中,數據透視
接下來用這個集合作為事例來分析二者的區別:
> 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 }
$project:
db.car.aggregate(
{$project:{_id:0,carname:1}}
)
//_id字段默認為1是顯示狀態,不需顯示用0表示, 其他字段默認為不顯示
顯示效果為:
$push:
db.car.aggregate(
{$group:{_id:null,name:{$push:'$carname'}}}
)
//_id:null 表示不指定分組的字段
顯示效果為: