आप निम्नलिखित एकत्रीकरण का उपयोग कर सकते हैं:
db.col.aggregate([
{
$addFields: {
weightedIds: {
$map:
{
input: "$weighted",
as: "w",
in: "$$w.phaseId"
}
}
}
},
{
$project: {
_id: 1,
weighted: 1,
phases: {
$filter: {
input: "$phases",
as: "phase",
cond: { $gte: [ { $indexOfArray: [ "$weightedIds" , "$$phase._id" ] }, 0 ] }
}
}
}
}
])
हम $map
. का उपयोग कर रहे हैं केवल phaseId
लेने के लिए weighted
. का क्षेत्र और फिर हम phases
. को फ़िल्टर कर सकते हैं $filter
का उपयोग करके प्रत्येक चरण के लिए जाँच कर रहा है कि क्या संबंधित id
मौजूद है ($indexOfArray
का उपयोग करके जो -1 अन्यथा लौटाता है)