ich eine Baumstruktur haben so aussehenMongoDB rekursive Suche nach Array von Objekten
{
"_id" : ObjectId("59aebe21f002a8556ca78310"),
"fid" : ObjectId("59aebe216b96002252a89d7b"),
"pr" : [
],
"ch" : [
{
"_id" : ObjectId("59aebe326b96002252a89d7d"),
"trashed" : false
},
{
"_id" : ObjectId("59aebe376b96002252a89d7f"),
"trashed" : false
}
]
}
{
"_id" : ObjectId("59aebe33f002a8556ca78347"),
"fid" : ObjectId("59aebe326b96002252a89d7d"),
"pr" : [
{
"_id" : ObjectId("59aebe216b96002252a89d7b"),
"trashed" : false
}
],
"ch" : [
{
"_id" : ObjectId("59aebe3b6b96002252a89d81"),
"trashed" : false
}
]
}
der fid ist ein Ordner-ID und die ch die Kinder des Ordners ist, so möchte ich ein tun rekursive Suche, um den Baum der Ordner und Dateien zu erhalten. In meinem Fall habe ich ein $graphLookup
verwendet eine rekursive Suche zu tun, sondern als Ergebnis erhalte ich andere Ordner zu
pipeline := []bson.M{
{"$match": bson.M{"fid": id}},
{"$graphLookup": bson.M{
"from": "tree",
"startWith": "$fid",
"connectFromField": "fid",
"connectToField": "ch._id",
"as": "parents",
}},
{"$match": bson.M{"ch.trashed": false}},
}
Connection.Session.DB("cctv_storage").C("tree").Pipe(pipeline).All(&tData)
Mein Projekt basiert auf Golang.
Bitte lesen Sie, wie '$ graphLookup' funktioniert: https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/ Wenn" connectToField ":" ch._id " '' '' '' sollte wirklich "Kinder" sein, nicht "Eltern". Das zweite '$ match' filtert nur die Dokumente der obersten Ebene, nicht alle Kinder/Eltern. Außerdem haben alle Dokumente im Beispiel "ch.trashed": false. –