После некоторых этапов конвейера агрегации мой документ MongoDB имеет следующий формат:
{
"key": "A",
"status": "To Do",
"val": 4
},
{
"key": "A",
"status": "Done",
"val": 1
},
{
"key": "A",
"status": "To Do",
"val": 3
},
{
"key": "A",
"status": "Done",
"val": 2
},
{
"key": "B",
"status": "Done",
"val": 5
},
{
"key": "B",
"status": "Done",
"val": 6
}
Ожидаемый результат:
- Группировать по
key
- Группировать по
status
- Pu sh
val
{
"key": "A",
"status_val": [
{
"status": "To Do",
"val": [
3,
4
]
},
{
"status": "Done",
"val": [
1,
2
]
}
]
},
{
"key": "B",
"status_val": "Done",
"val": [
5,
6
]
}
Вот что я пробовал:
db.collection.aggregate([
{
$group: {
_id: {
key:"$key",
status:"$status"
},
v: {
$push: "$val"
}
}
},
{
$group: {
_id: "$_id.key",
status_val: {
$addToSet: {
status: "$_id.status",
val: "$_id.v"
}
}
}},
{
$project: { _id: 0,key:"$_id",status_val:1 }
}
]).pretty()
Но я получаю неправильный вывод:
[
{
"key": "B",
"status_val": [
{
"status": "Done"
}
]
},
{
"key": "A",
"status_val": [
{
"status": "Done"
},
{
"status": "To Do"
}
]
}
]
Как получить вложенный массив внутри $group
?