आपको $unwind
. करना होगा अदिश और उप दस्तावेज़ दोनों को समतल करने के लिए विदेशी _ids और $group
. जोड़ें मूल संरचना वापस पाने के लिए पाइपलाइन के अंत में चरण।
$first
खेतों और $push
. रखने के लिए संचायक $arrayElemAt
. के साथ $unwind
. के लिए समायोजित करने के लिए सरणी मानों को संचित करने के लिए
var linkedModels = [
{
"$match": { "del": false }
},
{
"$lookup": {
from: "charnpcalign",
localField: "align",
foreignField: "_id",
as: "linked_align"
}
},
{
"$unwind":"$classes"
},
{
"$lookup": {
from: "charnpcclass",
localField: "classes",
foreignField: "_id",
as: "linked_classes"
}
},
{
"$group": {
"_id": "$_id",
"name": {"$first":"$name"},
"align": {"$first":"$align"},
"classes":{"$push":"$classes"},
"carrying":{"$first":"$carrying"},
"linked_align":{"$first":"$linked_align"},
"linked_classes":{"$push":{"$arrayElemAt":["$linked_classes",0]}}
}
},
{
"$unwind":"$carrying"
},
{
"$lookup": {
from: "item",
localField: "carrying.itemId",
foreignField: "_id",
as: "linked_carrying"
}
},
{
"$group": {
"_id": "$_id",
"name": {"$first":"$name"},
"align": {"$first":"$align"},
"classes":{"$first":"$classes"},
"linked_align":{"$first":"$linked_align"},
"carrying":{"$push":"$carrying"},
"linked_carrying":{"$push":{"$arrayElemAt":["$linked_carrying",0]}}
}
}
]
आपको $unwind
. की आवश्यकता नहीं है अदिश सरणी पर (classes
) 3.4 संस्करण में और आप {"classes":{"$push":"$classes"}}
को बदल सकते हैं &{"linked_classes":{"$push":{$arrayElemAt:["$linked_classes",0]}}}
{"classes":{"$first":"$classes"}}
. के साथ &{"linked_classes":{"$first":"$linked_classes"}}
क्रमशः।