我正在创建mongo聚合管道,在该管道中我通过列表的字段(门)展开文档。然后,我根据单个门中某个属性的条件进行过滤。
如何将过滤后的结果重新组合在一起,以使结果保持其原始形式?
这是我收藏中的一个文件示例:
{ "uuid": "00000000-0000-0000-0000-000000000000",
"name": "Building1",
"doors": [
{
"doorUuid": "11111111-1111-1111-1111-111111111111",
"creationTime": null
},
{
"doorUuid": "22222222-2222-2222-2222-222222222222",
"creationTime": 1560194908942
},
{
"doorUuid": "33333333-3333-3333-3333-333333333333",
"creationTime": 1560195008942
}
]
}
例如,如果我想过滤掉所有带有null creationTime的门,那么我想要的输出将在上面具有相同的结构,但只有两个门。
答案 0 :(得分:1)
$group
和$push
:
db.collection.aggregate([
{
$unwind: "$doors"
},
{
$match: {
"doors.creationTime": {
$ne: null
}
}
},
{
$group: {
_id: "$_id",
name: {
$last: "$name"
},
uuid: {
$last: "$uuid"
},
doors: {
$push: "$doors"
}
}
}
])