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}}} ]) 

如果您需要多列进行分组,请按照此模型。 在这里,我按照statustype进行计数:

 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/