connectToField
är ett namn, inte ett uttryck. Du kan inte göra något med det.
Du måste verkligen ompröva schemat. Det är bristfälligt på många sätt med början från icke-unika namn som används i överordnade referenser. Eftersom du förlitar dig på sökvägssträngen istället , behöver du en sökväg för att referera till föräldern.
Svaret nedan är körtid och är knappast att rekommendera för operativa frågor på grund av prestandaineffektivitet och några antaganden om hur stigen är byggd. Det kan dock användas som en engångsförfrågan.
I grund och botten måste du skapa en vy med beräknad överordnad sökväg:
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" ] }
} }
} }
} }
]);
Så då kan du göra din sökning som rekommenderas i din tidigare fråga:
db.tree.aggregate([
{ $graphLookup: {
from: "rootless_tree",
startWith: "$path",
connectFromField: "path",
connectToField: "parent_path",
as:"dep"
} },
{ $match: { dep: [] } },
])