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