Oxe*_*arf 3 arrays mongodb mongodb-query aggregation-framework
我正在尝试过滤数组数组的列表,这是一个结构示例。
{
"array1": [
{
"array2": [
{
"array3": [
{
"sampleId": 1
},
{
"sampleId": 2
},
{
"sampleId": 5
}
]
},
{
"array3": [
{
"sampleId": 7
},
{
"sampleId": 8
}
]
}
]
},
{
"array2": [
{
"array3": [
{
"sampleId": 1
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
假设我想过滤掉 sampleId > 2 的所有子文档
这是预期结果的一个例子。
{
"array1": [
{
"array2": [
{
"array3": [
{
"sampleId": 1
},
{
"sampleId": 2
}
]
},
{
"array3": []
}
]
},
{
"array2": [
{
"array3": [
{
"sampleId": 1
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下聚合
基本上你需要使用$map聚合遍历每个数组 ,最后使用$filter最后一个。
db.collection.aggregate([
{ "$project": {
"array1": {
"$map": {
"input": "$array1",
"as": "a1",
"in": {
"array2": {
"$map": {
"input": "$$a1.array2",
"as": "a2",
"in": {
"array3": {
"$filter": {
"input": "$$a2.array3",
"as": "a3",
"cond": { "$lte": ["$$a3.sampleId", 2] }
}
}
}
}
}
}
}
}
}}
])
Run Code Online (Sandbox Code Playgroud)
输出
[
{
"array1": [
{
"array2": [
{
"array3": [
{
"sampleId": 1
},
{
"sampleId": 2
}
]
},
{
"array3": []
}
]
},
{
"array2": [
{
"array3": [
{
"sampleId": 1
}
]
}
]
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |