получить количество значений свойств массива в MongoDB - PullRequest
0 голосов
/ 31 января 2019

Данные даны как

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

, где число является счетчиком каждого значения строки массива свойства данных.

Я работал над этим с использованием метода агрегированного конвейера, но, похоже, должен быть более простой способ.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы должны быть в состоянии сделать это с конвейером агрегации с $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 }
...