【发布时间】:2020-04-12 14:03:17
【问题描述】:
考虑到我有以下集合(忽略文档_id):
收藏
[
{
"Id": "1",
"Level2": [
{
"Id": "1.1",
"Level3": [
{
"Id": "1.1.1",
"Level4": [
{
"Id": "1.1.1.1",
"Status": "a"
},
{
"Id": "1.1.1.2",
"Status": "b"
}
]
},
{
"Id": "1.1.2",
"Level4": [
{
"Id": "1.1.2.1",
"Status": "a"
},
{
"Id": "1.1.2.2",
"Status": "c"
}
]
},
{
"Id": "1.1.3",
"Level4": [
{
"Id": "1.1.3.1",
"Status": "c"
}
]
}
]
}
]
},
{
"Id": "2",
"Level2": [
{
"Id": "2.1",
"Level3": [
{
"Id": "2.1.1",
"Level4": [
{
"Id": "2.1.1.1",
"Status": "a"
}
]
}
]
}
]
}
]
条件
我想查询如:
Level2.Id: "1.1"Level2.Level3.Level4.Status $in ["a", "b"]
$project 应该:
-
组
Level2.Level3.Level4匹配Level2.Level3 - 如果是空数组,则不应包含
Level2.Level3
预期结果应该是:
结果 1
[
{
"Id": "1.1.1",
"Level4": [
{
"Id": "1.1.1.1",
"Status": "a"
},
{
"Id": "1.1.1.2",
"Status": "b"
}
]
},
{
"Id": "1.1.2",
"Level4": [
{
"Id": "1.1.2.1",
"Status": "a"
}
]
}
]
请注意,如果当前Level2.Id: "2.1" 的值为"1.1",则结果应为(在不同文档上匹配):
结果 2
[
{
"Id": "1.1.1",
"Level4": [
{
"Id": "1.1.1.1",
"Status": "a"
},
{
"Id": "1.1.1.2",
"Status": "b"
}
]
},
{
"Id": "1.1.2",
"Level4": [
{
"Id": "1.1.2.1",
"Status": "a"
}
]
},
{
"Id": "2.1.1",
"Level4": [
{
"Id": "2.1.1.1",
"Status": "a"
}
]
}
]
如何使用 aggregate 查询来完成此操作?
(过滤不同的级别并按某个级别分组)
【问题讨论】:
-
这个问题也是我发的。虽然它专注于不同类型的问题(包含这个问题),而这个问题并没有很好地正式表达。我留下了这两个问题,因为可能更容易找到这个问题的快速答案以及未来关于这个问题的搜索。
标签: mongodb mongodb-query aggregation-framework pymongo