Собирать значения в сгруппированном поле

С заданными данными

{
    "type": "INGESTION",
    "message": "Lorem"
}

{
    "type": "INGESTION",
    "message": "Ipsum"
}

{
    "type": "DISCHARGE",
    "message": "dolor"
}

{
    "type": "DISCHARGE",
    "message": "sit"
}

Я хочу сгруппировать по type и собрать все возможные значения message в одно поле.

Ожидаемый результат должен быть чем-то вроде строк

[{
    "type": "INGESTION",
    "messages": ["Lorem", "Ipsum"]
},
{
    "type": "DISCHARGE",
    "messages": ["dolor", "sit"]
}]

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

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На документ есть пример, который описывает вашу ситуацию.

db.your_collection.aggregate([
    {
        $group: {
            "_id": "$type",
            "messages": { $push: "$message" }
        }
    }
]);

В качестве альтернативы используйте $addToSet вместо $push, если вам нужны уникальные записи в этом массиве.

manuelgu 28.05.2019 14:10

Другие вопросы по теме