MongoDB SELECT COUNT GROUP BY
我正在玩弄MongoDB试图弄清楚如何做一个简单的
SELECT province, COUNT(*) FROM contest GROUP BY province
但我似乎无法弄清楚使用聚合函数。 我可以使用一些非常奇怪的组语法来做到这一点
db.user.group({ "key": { "province": true }, "initial": { "count": 0 }, "reduce": function(obj, prev) { if (true != null) if (true instanceof Array) prev.count += true.length; else prev.count++; } });
但是有没有更容易/更快的方式使用聚合函数?
这将是使用aggregate
更容易的方法:
db.contest.aggregate([ {"$group" : {_id:"$province", count:{$sum:1}}} ])
如果您需要多列进行分组,请按照此模型。 在这里,我按照status
和type
进行计数:
db.BusinessProcess.aggregate( {"$group" : {_id : {status:"$status", type: "$type"}, count : { $sum : 1} } } )
基于聚合函数的结果,我需要一些额外的操作。 最后,我find了一些聚合函数的解决scheme,并基于MongoDB中的结果进行操作。 我有一个集合Request
与现场request, source, status, requestDate
。
单场分组:
db.Request.aggregate([ {"$group" : {_id:"$source", count:{$sum:1}}} ])
多个字段分组:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}} ])
多个字段分组使用&计数与使用字段sorting:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"_id.source":1}} ])
多个字段分组使用&计数与sorting使用计数:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"count":-1}} ])
这种types的查询为我工作:
db.events.aggregate({$group: {_id : "$date", number: { $sum : 1} }} )
参见http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/