Ash*_*shh 2 javascript mongodb node.js mongodb-query aggregation-framework
我有以下收藏
[
{
"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"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我想要 fo$filter到 3 个嵌套级别...我只想要nokia第三个数组中的元素以及6666第二个和old apartment第一个数组中的元素
我想要这个输出
[
{
"Array1": [
{
"Array2": [
{
"name": "6666",
"Array3": [
{
"_id": 12803918239,
"nest": "nokia"
}
]
}
],
"name": "old apartment"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
而且我也想做使用$filter并且$map只是...不想$unwind在这里使用
基本上,您必须使用$filter每个级别来应用您的条件以及$map每个内部有嵌套数组的数组。那是因为您想将过滤后的数组传递到输出。所以会有3过滤器和2地图。在这种情况下,缩进可能真的很有帮助。尝试:
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" ] } } }
}
}
}
}
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |