आप नीचे एकत्रीकरण पाइपलाइन का उपयोग कर सकते हैं।
एजेंट को पॉप्युलेट करने के लिए $लुकअप के बाद $reduce और $concatArrays सभी क्लाइंट आईडी एकत्र करने के लिए और क्लाइंट विवरण प्राप्त करने के लिए $लुकअप।
$addFields मिशन सरणी को पुनरावृत्त करने के लिए $map के साथ और प्रत्येक क्लाइंट के लिए क्लाइंट आईडी द्वारा पिछले चरण से क्लाइंट जानकारी को मैप करें और अन्य फ़ील्ड रखने के लिए $mergeObjects। अतिरिक्त क्षेत्रों को हटाने के लिए $प्रोजेक्ट चरण।
मोंगो डीबी 3.6 और इसके बाद के संस्करण
Model.aggregate([
{"$lookup":{
"from":"agents",
"localField":"agent",
"foreignField":"_id",
"as":"agent"
}},
{"$addFields":{"agent":{"$arrayElemAt":["$agent",0]}}},
{"$addFields":{
"client_ids":{
"$reduce":{
"input":"$missions",
"initialValue":[],
"in": {"$concatArrays":["$$value","$$this.clients.client"]}
}
}
}},
{"$lookup":{
"from":"clients",
"localField":"client_ids",
"foreignField":"_id",
"as":"client_info"
}},
{"$addFields":{
"missions":{
"$map":{
"input":"$missions",
"in":{
"$mergeObjects":[
"$$this",
{"clients":{"$map":{
"input":"$$this.clients",
"in":{"$mergeObjects":[
"$$this",
{"client":{"$arrayElemAt":[
"$client_info",
{"$indexOfArray":["$client_ids","$$this._id"]}
]}}
]}
}}}
]
}
}
}
}},
{"$project":{"client_ids":0,"client_info":0}}
])
मोंगो डीबी 3.6 से कम
एजेंट को पॉप्युलेट करने के लिए $लुकअप के बाद क्लाइंट तक पहुंचने के लिए $अनविंड करें और क्लाइंट विवरण प्राप्त करने के लिए देखें। आबादी वाले मानों के साथ मूल संरचना में वापस लाने के लिए $group के साथ रिवाइंड करें।
Model.aggregate([
{"$lookup":{
"from":"agents",
"localField":"agent",
"foreignField":"_id",
"as":"agent"
}},
{"$addFields":{"agent":{"$arrayElemAt":["$agent",0]}}},
{"$unwind":"$missions"},
{"$unwind":"$missions.clients"},
{"$lookup":{
"from":"clients",
"localField":"missions.clients.client",
"foreignField":"_id",
"as":"missions.clients.client"
}},
{"$addFields":{"missions.clients.client":{"$arrayElemAt":["$missions.clients.client",0]}}},
{"$group":{
"_id":{"_id":"$_id","mission_id":"$missions._id"},
"agent":{"$first":"$agent"},
"title":{"$first":"$missions.title"},
"clients":{"$push":"$missions.clients"}
}},
{"$group":{
"_id":"$_id._id",
"agent":{"$first":"$agent"},
"missions":{
"$push":{
"_id":"$_id.mission_id",
"title":"$title",
"clients":"$clients"
}
}
}}
])