$在mongodb中过滤最多3个嵌套级别 [英] $filter upto 3 nested level in mongodb
问题描述
我有以下收藏
[
{
"Array1": [
{
"Array2": [
{
"name": "6666",
"Array3": [
{ "_id": 128938120, "nest": "samsung" },
{ "_id": 12803918239, "nest": "nokia" }
]
},
{
"name": "5555",
"Array3": [
{ "_id": 48102938109, "nest": "iphone" },
{ "_id": 501293890, "nest": "micromax" }
]
}
],
"name": "old apartment"
},
{
"Array2": [
{
"_id": 410923810,
"name": "3333",
"Array3": [
{ "_id": 48102938190, "nest": "airtel" },
{ "_id": 48102938190, "nest": "jio" }
]
},
{
"_id": 41092381029,
"name": "2222",
"Array3": [
{ "_id": 10293182309, "nest": "master" },
{ "_id": 38190238, "nest": "cub" }
]
}
],
"name": "new apartment"
}
]
}
]
我想要 $ filter
到3个嵌套级别......我只想要来自第3个数组的 nokia
元素和 6666
元素来自第二个旧公寓
来自第一个
I want to fo $filter
to 3 nested level... I want only nokia
element from 3rd array and 6666
element from second and old apartment
from the first
我想要这个输出
[
{
"Array1": [
{
"Array2": [
{
"name": "6666",
"Array3": [
{
"_id": 12803918239,
"nest": "nokia"
}
]
}
],
"name": "old apartment"
}
]
}
]
我还想用 $ filter
和 $ map
only ...不想使用 $ unwind
这里
And also I want to do using $filter
and $map
only... Don't want to use $unwind
here
推荐答案
基本上你必须使用 $ filter
为每个级别应用您的条件和 $ map
为每个嵌套数组的数组。那是因为你想将过滤后的数组传递给输出。因此会有 3
过滤器和 2
地图。在这种情况下,缩进可能真的很有帮助。尝试:
Basically you have to use $filter
for each level to apply your condition and $map
for each array that has nested array inside. That's because you want to pass filtered array to the output. So there will be 3
filters and 2
maps. Indentations might be really helpful in this case. Try:
db.collection.aggregate([
{
$project: {
Array1: {
$map: {
input: { $filter: { input: "$Array1", as: "a1", cond: { $eq: ["$$a1.name", "old apartment" ] } } },
as: "a1",
in: {
name: "$$a1.name",
Array2: {
$map: {
input: { $filter: { input: "$$a1.Array2", as: "a2", cond: { $eq: [ "$$a2.name", "6666" ] } } },
as: "a2",
in: {
name: "$$a2.name",
Array3: { $filter: { input: "$$a2.Array3", as: "a3", cond: { $eq: [ "$$a3.nest", "nokia" ] } } }
}
}
}
}
}
}
}
}
])
这篇关于$在mongodb中过滤最多3个嵌套级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!