先來看一個分組的例子,本例中$group是一個管道操作符,獲得的結果可以接着輸出到下一個管道,而內部的$sum是一個表達式操作符。
參考鏈接
https://www.jianshu.com/p/72fc4409936c
用$group 舉個例子
將document分組,用作統計結果 ``` db.Ubisoft.aggregate([ // aggregate方法接收的是一個數組 { $group: { _id: '$time', num: {$sum: 1} } } ]) // 這里的_id字段表示你要基於哪個字段來進行分組(即制定字段值相同的為一組),這里的$time就表示要基於time字段來進行分組 // 下面的num字段的值$sum: 1表示的是獲取滿足time字段相同的這一組的數量乘以后面給定的值(本例為1,那么就是同組的數量)。 ```
那么看完這個例子之后,mongoDB中還有其他的一些管道操作符和表達式操作符:
管道操作符
常用管道 含義
$group 將collection中的document分組,可用於統計結果
$match 過濾數據,只輸出符合結果的文檔
$project 修改輸入文檔的結構(例如重命名,增加、刪除字段,創建結算結果等)
$sort 將結果進行排序后輸出
$limit 限制管道輸出的結果個數
$skip 跳過制定數量的結果,並且返回剩下的結果
$unwind 將數組類型的字段進行拆分
表達式操作符
常用表達式 含義 $sum 計算總和,{$sum: 1}表示返回總和×1的值(即總和的數量),使用{$sum: '$制定字段'}也能直接獲取制定字段的值的總和 $avg 平均值 $min min $max max $push 將結果文檔中插入值到一個數組中 $first 根據文檔的排序獲取第一個文檔數據 $last 同理,獲取最后一個數據
我們現在來試試其他的表達式操作符:
#數據結果 /* 1 */ { "_id" : ObjectId("5b0cf67270e4fa02d31de42e"), "name" : "rainbowSix Siege", "time" : 400.0 } /* 2 */ { "_id" : ObjectId("5b0cf69270e4fa02d31de42f"), "name" : "Assassin's creed", "time" : 20.0 } /* 3 */ { "_id" : ObjectId("5b0cf6ad70e4fa02d31de430"), "name" : "ghost Recon", "time" : 0.0 } /* 4 */ { "_id" : ObjectId("5b0d14c870e4fa02d31de436"), "name" : "farCry", "time" : 0.0 } # 查詢方法push db.Ubisoft.aggregate([ { $group: { _id: '$time', gameName: {$push: '$name'} } } ]) ]) 返回結果為: /* 1 */ { "_id" : 20.0, "gameName" : [ "Assassin's creed" ] } /* 2 */ { "_id" : 0.0, "gameName" : [ "ghost Recon", "farCry" ] } /* 3 */ { "_id" : 400.0, "gameName" : [ "rainbowSix Siege" ] }