connectToField
एक नाम है, अभिव्यक्ति नहीं। आप इसके साथ कुछ नहीं कर सकते।
आपको वास्तव में स्कीमा पर फिर से विचार करने की आवश्यकता है। यह मूल संदर्भों में प्रयुक्त गैर-अद्वितीय नामों से शुरू होने वाले कई मायनों में त्रुटिपूर्ण है। चूंकि आप इसके बजाय पथ स्ट्रिंग पर भरोसा करते हैं , आपको माता-पिता को संदर्भित करने के लिए पथ की आवश्यकता है।
नीचे दिया गया उत्तर इसे रनटाइम करता है, और प्रदर्शन अक्षमता के कारण परिचालन संबंधी प्रश्नों के लिए शायद ही उचित हो और पथ कैसे बनाया जाता है इसकी कुछ धारणाएं। हालांकि इसे एकबारगी अनुरोध के रूप में इस्तेमाल किया जा सकता है।
मूल रूप से आपको एक दृश्य बनाने की आवश्यकता है। परिकलित मूल पथ के साथ:
db.createView("rootless_tree", "tree", [
{ $match: { parent: { $ne: null } } },
{ $addFields: {
parent_path: { $let: {
vars: { parents: { $split: [ "$path", "#" ] } },
in: { $reduce: {
input: { $slice: [ "$$parents", 1, { $subtract: [ { $size: "$$parents" }, 2 ] } ] },
initialValue: "",
in: { $concat: [ "$$value", "#", "$$this" ] }
} }
} }
} }
]);
तो फिर आप अपने पिछले प्रश्न में सलाह के अनुसार अपना लुकअप कर सकते हैं:
db.tree.aggregate([
{ $graphLookup: {
from: "rootless_tree",
startWith: "$path",
connectFromField: "path",
connectToField: "parent_path",
as:"dep"
} },
{ $match: { dep: [] } },
])