如何按字段计数汇总集合和分组

时间:2014-10-17 20:48:04

标签: mongodb

我有一组看起来像这样的用户:

{
  "_id": ObjectId("54380a817a4b612a38e87613"),
  "email": "email@email.com",
  "ogp": [BIG NESTED COLLECTION... {}, {}, {}]
  "created": ISODate("2012-02-28T23:10:07Z"),
  "o_id": ObjectId("5438096f7a4b612a38e445f4")
  "geo": {"country":"US", "city":"Seattle", "longitude": 123, "latitude":123}

}

我希望获得所有用户的位置,并按国家/地区分组。像这样:

[ {country:"US",total:250,000}, {country:"GB",total:150,000}, ... ]

目前我只是抓取所有文档并在服务器上解析它:

db.users.find({'geo.country': {$ne: null},'geo.city': {$ne: null}}, {'geo.country':1}, function(err, doc) {
    var data;
    doc = _.groupBy(doc, function(par) { return par.geo.country; });
    data = [];
    return _.each(doc, function(item, key, obj) {
        return data.push([key, obj[key].length]);
    });
});

这个问题是有600,000多个文档,查询大约需要1分钟才能执行。 "聚合"功能会有助于加快这个查询?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:1)

这应该这样做:

db.myCollection.aggregate([
    {"$group": {_id: "$geo.country", count:{$sum:1}}}
])