我玩周围的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++;
}
});
但是是否有更简单/更快的方法使用聚合函数?
db.contest.aggregate([
{ $match:{.....May be some match criteria...}},
{ $project: {"province":1,_id:0}},
{ $sortByCount: "$province" }
],{allowDiskUse:true});
MongoDB对内存的排序操作有32mb的限制,使用allowDiskUse: true这个选项,当你在数百万数据之前公开这个查询时,它将在磁盘级别而不是内存级别进行排序。MongoDB聚合管道有100MB的限制,因此使用$project来减少流向下一个管道的数据。
如果您使用的是小数据,那么不需要使用allowDiskUse选项。
db.contest.aggregate([
{ $match:{.....May be some match criteria...}},
{ $project: {"province":1,_id:0}},
{ $sortByCount: "$province" }
],{allowDiskUse:true});
MongoDB对内存的排序操作有32mb的限制,使用allowDiskUse: true这个选项,当你在数百万数据之前公开这个查询时,它将在磁盘级别而不是内存级别进行排序。MongoDB聚合管道有100MB的限制,因此使用$project来减少流向下一个管道的数据。
如果您使用的是小数据,那么不需要使用allowDiskUse选项。