如何使用MongoDB Aggregate

时间:2016-02-17 11:04:39

标签: javascript mongodb

我有以下数据对象:

[
  {
    "_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();
});

任何帮助都将不胜感激。

由于

1 个答案:

答案 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 }