1
我有一個樹形結構的陣列MongoDB的遞歸搜索這個樣子的對象
{
"_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
}
]
}
的FID是一個文件夾ID和CH是文件夾的孩子,所以我想做一個遞歸搜索獲取文件夾和文件的樹。 在我來說,我有一個用$graphLookup
做遞歸搜索,但結果我收到的其他文件夾也基於Golang
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)
我的項目。
請閱讀'$ graphLookup'如何工作:https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/如果''connectToField「:」ch._id「那麼''應該真的是「孩子」,而不是「父母」。第二個「$匹配」僅過濾頂級文檔,而不是所有的孩子/父母。此外,示例中的所有文檔都有''ch.trashed':false'。 –