我玩周围的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++;
}
});
但是是否有更简单/更快的方法使用聚合函数?
根据聚合函数的结果,我需要做一些额外的操作。最后,基于MongoDB中的结果,对聚合函数和操作找到了一些解决方案。我有一个集合请求字段请求,来源,状态,requestDate。
单字段组按&计数:
db.Request.aggregate([
{"$group" : {_id:"$source", count:{$sum:1}}}
])
多个字段按计数分组:
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}
])
多个字段分组&计数使用字段排序:
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
{$sort:{"_id.source":1}}
])
多个字段按计数分组,使用计数排序:
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
{$sort:{"count":-1}}
])