javascript - 如何使用 MongoDB 聚合

标签 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 值。 例如,如果我说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/

相关文章:

javascript - Vuex 和 VueJS(不要在变异处理程序之外改变 vuex 存储状态)

javascript - 为什么我的数组中会出现未定义的值?

javascript - 客户端 JWT 基于角色的授权

java - MongoDB 从内部类中检索数据。使用 mongo 模板

javascript - Angular 悬停 + 按键事件

javascript - 使用javascript更改悬停时的img src

mongodb - Mongodb中的保存和插入有什么区别?

python - MongoEngine vs MongoKit for Django

mongodb - 在 symfony2 + doctrine 中更改运行时的 MongoDB 集合

java - Morphia 在保存到 DataStore 时给出 NoSuchMethodError