получить количество значений свойств массива в MongoDB

1

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

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

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

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

  • 0
    Доступны ли эти данные в javascript ? Вы бы приняли ответ, используя методы массива javascript?
  • 0
    Я работал над созданием запроса в CLI-клиенте mongoDB, но конечной целевой средой является приложение nodejs. Я использую JavaScript
Показать ещё 1 комментарий
Теги:
arrays
distinct-values

1 ответ

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 }
  • 0
    просто точно. Я нашел моменты применимости unwind после того, как вы опубликовали этот ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню