在MongoDB中获取数组属性值的计数

时间:2019-01-31 20:31:20

标签: javascript arrays mongodb distinct-values

给出类似数据

C-s

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

[
    { _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"]},
]

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

我一直在通过聚合管道方法进行研究,但是似乎应该有一种更简单的方法。

1 个答案:

答案 0 :(得分: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 }