Подтвердить что ты не робот

MongoDB: Как получить отдельный список значений поля поддокумента?

Скажем, у меня есть следующие документы в коллекции:

{
   "family": "Smith",
   "children": [
        {
            "child_name": "John"
        },
        {
            "child_name": "Anna"
        },
    ]
}

{
   "family": "Williams",
   "children": [
        {
            "child_name": "Anna"
        },
        {
            "child_name": "Kevin"
        },
    ]
}

Теперь я хочу получить как-то следующий список уникальных дочерних имен, пересекающих все семейства:

[ "John", "Anna", "Kevin" ]

Структура результата может отличаться. Как добиться этого в MongoDB? Должно быть что-то простое, но я не могу понять. Я попробовал функцию aggregate() в коллекции, но тогда я не знаю, как применить функцию distinct().

4b9b3361

Ответ 1

Вы можете просто сделать:

db.collection.distinct("children.child_name");

В вашем случае он возвращает:

[ "John", "Anna", "Kevin" ]

Ответ 2

с помощью структуры агрегации помощи:

db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name'}}])

или больше интереса;) с частотой имени:

db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name', freq:{$sum:1}}}])