Данные даны как
[
{ _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 },
]
где число является счетчиком каждого значения строки массива свойств данных.
Я работал над этим с использованием подхода совокупного конвейера, но, похоже, должен быть более легкий путь.
Вы должны быть в состоянии сделать это с помощью конвейера агрегации с $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
после того, как вы опубликовали этот ответ
javascript
? Вы бы приняли ответ, используя методы массива javascript?