यदि आप कोई फ़ील्ड जोड़ते हैं parent
प्रत्येक नोड के लिए माता-पिता को पकड़ने के लिए, यह बड़े डेटासेट पर क्वेरी को अनुकूलित करने में मदद कर सकता है। उदाहरण के लिए:
{"parent": "", "node": "#a"}
{"parent": "#a", "node": "#a#b"}
{"parent": "#a", "node": "#a#c"}
{"parent": "#a#b", "node": "#a#b#1"}
{"parent": "#a#b", "node": "#a#b#2"}
{"parent": "#a#c", "node": "#a#c#1"}
{"parent": "#a#c#1", "node": "#a#c#1#x"}
फिर आप $graphLookup (एकत्रीकरण) का उपयोग कर सकते हैं पार करने के लिए ऑपरेटर।
#a#c
. के लिए ट्री नोड के सभी बच्चों को प्राप्त करने के लिए आपकी रेगेक्स क्वेरी का एक विकल्प :
db.tree.aggregate([
{$match:{"node":"#a#c"}},
{$graphLookup:{
from:"tree",
startWith:"$node",
connectFromField:"node",
connectToField:"parent",
as:"dep"}},
{$project:{"dep.node":1, "_id":0}}
])
#a#c
. के केवल पत्ते ढूंढें :
db.tree.aggregate([
{$match:{"parent": {$regex:"^#a#c"}}},
{$graphLookup:{
from:"tree",
startWith:"$node",
connectFromField:"node",
connectToField:"parent",
as:"dep"}},
{$match:{dep:[]}},
{$project:{"_id":0, node:1}}
])
मैं मॉडल ट्री स्ट्रक्चर्स की समीक्षा करने की भी सिफारिश करूंगा। , MongoDB में ट्री डेटा संरचनाओं का उपयोग करने के कई तरीके हैं। आपके उपयोग के मामले के आधार पर आपको अपने आवेदन पूछताछ लाभों के लिए कुछ संरचनाओं को नियोजित करना चाहिए।