在某些聚合管道阶段之后,我的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
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
?
您正确地运行了$group
两次,但此行需要更改:
val: "$_id.v"
v
不是的一部分_id
,首先使用的数据$group
如下所示:
{
"_id": { "key": "B, "status": "Done" },
"v": [ 5, 6 ]
}
尝试:
db.collection.aggregate([
{
$group: {
_id: { key: "$key", status: "$status" },
val: { $push: "$val" }
}
},
{
$group: {
_id: "$_id.key",
status_val: {
$push: {
status: "$_id.status",
val: "$val"
}
}
}
},
{
$project: {
_id: 0,
key: "$_id",
status_val: 1
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句