【问题标题】:get a count of array property values in MongoDB获取 MongoDB 中数组属性值的计数
【发布时间】:2019-06-25 09:33:36
【问题描述】:

给定数据

[
    { _id:1, data:["abc", "def", "hij", "klm", "nop"]},
    { _id:2, data:["abc", "def", "hij"]},
    { _id:3, data:["abc", "hij"]},
    { _id:4, data:["abc", "def", "hij", "klm", "nop"]},
    { _id:5, data:["def", "hij", "klm"]},
]

我正在尝试获得类似的查询结果

[
    { "abc": 4 },
    { "def": 4 },
    { "hij": 5 },
    { "klm": 3 },
    { "nop": 2 },
]

其中数字是每个数据属性数组字符串值的计数。

我一直在从聚合管道方法着手,但似乎应该有更简单的方法。

【问题讨论】:

  • javascript 中有这些数据吗?你会接受使用 javascript 的数组方法的答案吗?
  • 我一直致力于在 mongoDB CLI 客户端中构建查询,但最终目标环境是 nodejs 应用程序。我正在使用 javascript
  • 我只能提供一个解决方案,您可以在 Javascript 端处理数据,但我相信您希望它已经处理到 Javascript。无论如何,我建议添加您尝试过的内容...

标签: javascript arrays mongodb distinct-values


【解决方案1】:

您应该能够使用带有$unwind + $group 的聚合管道来执行此操作。例如:

db.col.aggregate([{$unwind:"$data"}, {$group: {_id: "$data", data: {$sum: 1}}}])

返回:

{ "_id" : "nop", "data" : 2.0 }
{ "_id" : "abc", "data" : 4.0 }
{ "_id" : "def", "data" : 4.0 }
{ "_id" : "hij", "data" : 5.0 }
{ "_id" : "klm", "data" : 3.0 }

【讨论】:

  • 完全正确。在您发布此答案后,我发现 unwind 的适用性瞬间
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多