我有以下数据对象:
[
{
"_id": "56bab”,
"region": “AS”,
“spentOn”: [
“56bf623a0c90b5”
]
},
{
"_id": "57bab",
"region": "EU",
"spentOn": [
"b5”,
"b6”,
"b8”,
]
},
{
"_id": "58bab",
"region": "EU",
"spentOn": [
"b5”
"b6”
]
}
]
我想编写一个MongoDB调用(来自JS),以根据我指定的区域获取最常见的spentOn
值。
例如,如果我说区域='欧盟'我希望能回来:b6,b5和b8。
我已经阅读了this page并尝试了以下内容,但不确定我是如何获得特定区域的内容的?
return Q.promise(function(resolve, reject) {
User.aggregate( [
{ $group: { _id: "$spentOn", count: { "$sum":1 } } },
{ }
] );
resolve();
});
任何帮助都将不胜感激。
由于
答案 0 :(得分:2)
就像评论中已经提到的那样,这里的诀窍是使用$unwind阶段。
因此,可能的解决办法是:
db.users.aggregate([
{$match:{
region: "EU"
}},
{$unwind:"$spentOn"},
{$group:{
_id: "$spentOn",
count: {$sum:1}
}},
{$sort: {count:-1}}
])
这给出了以下结果:
{ "_id" : "b6", "count" : 2 }
{ "_id" : "b5", "count" : 2 }
{ "_id" : "b8", "count" : 1 }