आपके उपयोग के मामले के आधार पर, MongoDB v3.4 एक एकत्रीकरण पाइपलाइन प्रदान करता है $graphLookup नाम का ऑपरेटर . एकत्रीकरण ऑपरेटर संग्रह पर पुनरावर्ती खोज करने में सक्षम है। $graphLookup definition पर और निश्चित देखें .
उदाहरण के तौर पर अपने दस्तावेज़ों के पदानुक्रम और उपरोक्त मानों का उपयोग करके, आप नीचे एकत्रीकरण चलाने का प्रयास कर सकते हैं:
db.collectionName.aggregate([
{$unwind:{
path:"$childrenIdList",
preserveNullAndEmptyArrays: true}
},
{$graphLookup:{
from:"collectionName",
startWith:"$_id",
connectFromField:"_id",
connectToField:"childrenIdList",
as:"myparents",
restrictSearchWithMatch: {"_id"}}
},
{$match: {"_id": 7 } },
{$group:{
_id:"$_id",
parents:{$addToSet:"$myparents._id"}
}}
]);
उपरोक्त परिणाम नीचे दिया जाना चाहिए:
{ "_id" : 7, "parents" : [ [ 1, 2, 4 ] ] }
ऐसा कहने के बाद, यदि आपके पास एक बड़ा संग्रह है, तो उपरोक्त क्वेरी प्रदर्शनकारी नहीं हो सकती है क्योंकि आप प्रदर्शन कर रहे होंगे $अनविंड प्रत्येक दस्तावेज़ पर और अनुक्रमणिका का उपयोग करने में सक्षम नहीं होंगे। जैसा कि दूसरों ने सुझाव दिया है, आपको अपने दस्तावेज़ मॉडल संरचना पर फिर से विचार करना चाहिए। देखें डेटा मॉडल ट्री स्ट्रक्चर . अपने एप्लिकेशन लॉजिक और क्वेरी उपयोग के मामले के आधार पर ऑप्टिमाइज़ करें, और लचीले दस्तावेज़ स्कीमा का पालन करें।