connectToField
is een naam, geen uitdrukking. Je kunt er niets mee.
Je moet het schema echt opnieuw bekijken. Het is in veel opzichten gebrekkig, te beginnen met niet-unieke namen die worden gebruikt in bovenliggende verwijzingen. Aangezien u in plaats daarvan vertrouwt op de padtekenreeks , hebt u een pad nodig om naar de ouder te verwijzen.
Het onderstaande antwoord doet het runtime, en is nauwelijks aan te raden voor operationele vragen vanwege inefficiëntie van de prestaties en enkele aannames over hoe het pad is gebouwd. Het kan echter wel als een eenmalig verzoek worden gebruikt.
In principe moet je een weergave maken met berekend ouderpad:
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" ] }
} }
} }
} }
]);
Dus dan kunt u uw zoekopdracht uitvoeren zoals geadviseerd in uw vorige vraag:
db.tree.aggregate([
{ $graphLookup: {
from: "rootless_tree",
startWith: "$path",
connectFromField: "path",
connectToField: "parent_path",
as:"dep"
} },
{ $match: { dep: [] } },
])