Как сгруппировать данные и вывести для каждой группировки наличие полей? (Mongodb)
например есть таблица-коллекция accounts.
account time category
r1 2020 fact
r1 2020 plan
r3 2019 fact
Как вывести группировку account + time и для такой группировки показать какие категории там есть?
Вот запрос group в агрегации:
{
_id: {
'account': '$account',
'time': '$time',
},
count: { $sum: 1 },
}
База выводит документы такого формата:
{
"_id" : {
"account" : "r1",
"time" : "2020"
},
"count" : 2
}
Но вот как затем добавить туда уникальные категории? Чтобы вывод был таким:
{
"_id" : {
"account" : "r1",
"time" : "2020"
},
"cats": ['fact','plan'],
"count" : 2
},
{
"_id" : {
"account" : "r3",
"time" : "2019"
},
"cats": ['fact'],
"count" : 1
},
Ответы (1 шт):
Автор решения: Exploding Kitten
→ Ссылка
Можно воспользоваться оператором $push: https://docs.mongodb.com/manual/reference/operator/aggregation/push/.
{
$group: {
_id: {
"account": "$account",
"time": "$time"
},
count: {
$sum: 1
},
cats: {
$push: "$category"
}
}
}