我有以下数据对象:
[
{
"_id": "56bab”,
"region": “AS”,
“spentOn”: [
“56bf623a0c90b5”
]
},
{
"_id": "57bab",
"region": "EU",
"spentOn": [
"b5”,
"b6”,
"b8”,
]
},
{
"_id": "58bab",
"region": "EU",
"spentOn": [
"b5”
"b6”
]
}
]
我想编写一个 MongoDB 调用(从 JS)来根据我指定的区域获取最常见的 spentOn
值。
例如,如果我说region='EU',我希望返回:b6、b5 和 b8。
我已阅读 this page并尝试了以下操作,但不确定如何获取特定区域的内容?
return Q.promise(function(resolve, reject) {
User.aggregate( [
{ $group: { _id: "$spentOn", count: { "$sum":1 } } },
{ }
] );
resolve();
});
如有任何帮助,我们将不胜感激。
谢谢
最佳答案
就像评论中已经建议的那样,这里的技巧是使用 $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 }
关于javascript - 如何使用 MongoDB 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454888/