ฉันกำลังพยายามรวบรวมวัตถุทั้งหมดในอาร์เรย์ที่ซ้อนกันโดยที่ฟิลด์ spec
เท่ากับ unknown
โครงสร้างต่อเอกสารจะคล้ายกับสิ่งนี้:
{
"_id" :"5b1e73786f11e421956023c3",
"subs" : [
{
"name" : "subrepo1",
"files" : [
{
"name" : ".....",
"spec" : "Unknown"
},
{
"name" : ".....",
"spec" : "Unknown"
}
]
},
{
"name" : "subrepo2",
"files" : [
{
"name" : "file2",
"spec" : "Unknown"
},
{
"name" : ".....",
"spec" : "1234"
}
]
}
]
}
ฉันลองทำสิ่งต่อไปนี้แล้ว แต่มันไม่ทำงาน ฉันคิดว่านี่เป็นไปในทิศทางที่ถูกต้อง แต่ฉันอาจพลาดบางสิ่งที่สำคัญไป
db.col.aggregate([
{$match: {'subs.files.spec': 'Unknown'}},
{$project: {
'subs.files': {$filter: {
input: '$subs.files',
//as: 'subs.files',
cond: {$eq: ['this.spec', 'FunSuite']}
}},
//_id: 0
}}
])
ผลลัพธ์ที่คาดหวังจะเป็น: (ดังนั้นเฉพาะไฟล์ที่มี spec เท่ากับ Unknown (ไม่ใช่ไฟล์อื่น)
{
"_id" : "5b1e73786f11e421956023c3",
"subs" : [
{
"name" : "subrepo1",
"files" : [
{
"name" : ".....",
"spec" : "Unknown"
},
{
"name" : ".....",
"spec" : "Unknown"
}
]
},
{
"name" : "subrepo2",
"files" : [
{
"name" : "file2",
"spec" : "Unknown"
}
]
}
]
}