我在一個包含嵌套陣列的集合中有兩個檔案:
{
faculty: '2019-00001-FC-0',
sections: [
{
section: 'DEET 3-1',
date: '04-19-2022',
subject: 'Integrated Circuits',
attendance: [
{
number: '2019-00005-MN-0',
status: 'Present'
},
{
number: '2019-00006-MN-0',
status: 'Present'
},
{
number: '2019-00007-MN-0',
status: 'Present'
},
{
number: '2019-00015-MN-0',
status: 'Present'
},
{
number: '2019-00016-MN-0',
status: 'Present'
},
{
number: '2019-00018-MN-0',
status: 'Present'
},
{
number: '2019-00019-MN-0',
status: 'Present'
},
{
number: '2019-00020-MN-0',
status: 'Present'
},
{
number: '2019-14614-MN-0',
status: 'Present'
}
]
}
]
}
和
{
faculty: '2019-00002-FC-0',
sections: [
{
section: 'DEET 3-1',
date: '04-19-2022',
subject: 'Integrated Circuits',
attendance: [
{
number: '2019-00005-MN-0',
status: 'Present'
},
{
number: '2019-00006-MN-0',
status: 'Present'
},
{
number: '2019-00007-MN-0',
status: 'Present'
},
{
number: '2019-00015-MN-0',
status: 'Present'
},
{
number: '2019-00016-MN-0',
status: 'Present'
},
{
number: '2019-00018-MN-0',
status: 'Present'
},
{
number: '2019-00019-MN-0',
status: 'Present'
},
{
number: '2019-00020-MN-0',
status: 'Present'
},
{
number: '2019-14614-MN-0',
status: 'Present'
}
]
}
]
}
我一直在使用 find 和 aggregate 來獲取嵌套陣列中的特定值:
db.attendances.aggregate({
$project: {
sections: {
$filter: {
input: '$sections',
as: 's',
cond: {
$and: [
{
$eq: ['$$s.section', 'DEET 3-1'],
}
]
}
}
}
}
});
但是,每當我將代碼嵌套到陣列中時,它就不起作用了。
我希望從不同的檔案中輸出“2019-000005-MN-0”,例如:
{
faculty: '2019-00001-FC-0',
sections: [
{
section: 'DEET 3-1',
date: '04-19-2022',
subject: 'Integrated Circuits',
attendance: [
{
number: '2019-00005-MN-0',
status: 'Present'
}
]
}
]
}
和
{
faculty: '2019-00002-FC-0',
sections: [
{
section: 'DEET 3-1',
date: '04-19-2022',
subject: 'Integrated Circuits',
attendance: [
{
number: '2019-00005-MN-0',
status: 'Present'
}
]
}
]
}
有沒有辦法做到這一點或類似的東西?提前致謝!
uj5u.com熱心網友回復:
詢問
- 因為您有嵌套陣列,所以需要嵌套
map/filter - 對于嵌套,您需要過濾器以僅保留
attendance數字 - 對于外部陣列,您需要映射,而不是過濾,因為您不僅要保留一些成員,而且要更改它們
- 外部地圖
sections用 null 替換不匹配的,如果匹配,它們會嵌套并過濾attendance - 我們需要最后一個過濾器
sections來洗掉那些空值
玩蒙哥
aggregate(
[{"$set":
{"sections":
{"$map":
{"input": "$sections",
"as": "s",
"in":
{"$cond":
[{"$eq": ["$$s.section", "DEET 3-1"]},
{"$mergeObjects":
["$$s",
{"attendance":
{"$filter":
{"input": "$$s.attendance",
"as": "a",
"cond": {"$eq": ["$$a.number", "2019-00005-MN-0"]}}}}]},
null]}}}}},
{"$set":
{"sections":
{"$filter":
{"input": "$sections", "cond": {"$ne": ["$sections", null]}}}}}])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459369.html
標籤:mongodb
上一篇:貓鼬在選擇中添加條件
