mongodb 分組聚合查詢
阿新 • • 發佈:2017-09-21
聚合框架 並不會 分組聚合 類型轉換 計算 add 跟著 集合 而不是
MongoDB,分組,聚合
使用聚合,db.集合名.aggregate… 而不是find
管道在Unix和Linux中一般用於將當前命令的輸出結果作為下一個命令的參數。
MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢後將結果傳遞給下一個管道處理。管道操作是可以重復的。
每一個操作符(集合)都會接受一連串的文檔,對這些文檔做一些類型轉換,最後將轉換後的文檔作為結果傳遞給下一個操作符,對於最後一個操作符,是將結果返回給客戶端
//分組(這裏制定了分組字段 $+字段名)
//這裏可以理解為,吧lastModifyByUserCode 當作唯一標識 _id,字段count 用 $sum 計算 同一個lastModifyByUserCode出現次數
db.test.aggregate({‘$group‘:{‘_id‘:‘$lastModifyByUserCode‘,‘count‘:{‘$sum‘:1}}})
//根據多個字段分組
db.test.aggregate({$group:{_id:{lastModifyByUserCode:‘$lastModifyByUserCode‘,createTime:‘$createTime‘}}})
//顯示其他字段(必須使用聚合[$sum,$avg,$first,$last,$max,$min,$push,$addToSet,$stdDevPop,$stdDevSamp])
db.test.aggregate({‘$group‘:{‘_id‘:‘$lastModifyByUserCode‘,‘count‘:{‘$sum‘:1},‘createTime‘:{‘$first‘:"$createTime"}}})
//投射,可以對字段重命名,可以創建字段副本(註意:在對字段重命名時,MongoDB並不會記錄字段的歷史名稱,因此如果在"orginalfieldname"字段上有一個索引,聚合框架無法在下面的排序操作中使用這個索引,所以,應該盡量在修改字段名稱之前使用索引)
db.test.aggregate({$project:{createTime2:‘$createTime‘,createTime3:‘$createTime‘,_id:0}})
$match 用於對文檔集合進行篩選,支持find一樣的篩選條件,不能在$match中使用地理空間操作符,(盡量把$match放在多個聚合中的第一個,這樣可以有效利用索引)
而且根據官方文檔,如果在$match使用了全文索引,後面跟著的聚合就不用再使用$text
mongodb 分組聚合查詢