Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何按字段计数聚合集合和分组_Mongodb - Fatal编程技术网

Mongodb 如何按字段计数聚合集合和分组

Mongodb 如何按字段计数聚合集合和分组,mongodb,Mongodb,我有一组用户,看起来像这样: { "_id": ObjectId("54380a817a4b612a38e87613"), "email": "email@email.com", "ogp": [BIG NESTED COLLECTION... {}, {}, {}] "created": ISODate("2012-02-28T23:10:07Z"), "o_id": ObjectId("5438096f7a4b612a38e445f4") "geo": {"count

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

{
  "_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}, ... ]
我想得到所有用户的位置,并按国家和总数对他们进行分组。大概是这样的:

{
  "_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]);
    });
});
问题是有600000多个文档,执行查询大约需要1分钟。“聚合”函数是否有助于加快查询速度?如果是这样,我该怎么做

这应该可以做到:

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