フィールドparent
を追加した場合 各ノードの親をキャプチャするには、より大きなデータセットでのクエリを最適化すると役立つ場合があります。例:
{"parent": "", "node": "#a"}
{"parent": "#a", "node": "#a#b"}
{"parent": "#a", "node": "#a#c"}
{"parent": "#a#b", "node": "#a#b#1"}
{"parent": "#a#b", "node": "#a#b#2"}
{"parent": "#a#c", "node": "#a#c#1"}
{"parent": "#a#c#1", "node": "#a#c#1#x"}
次に、 $graphLookup(集約) を利用できます。 トラバースする演算子。
#a#c
のツリーノードのすべての子を取得するための正規表現クエリの代替手段 :
db.tree.aggregate([
{$match:{"node":"#a#c"}},
{$graphLookup:{
from:"tree",
startWith:"$node",
connectFromField:"node",
connectToField:"parent",
as:"dep"}},
{$project:{"dep.node":1, "_id":0}}
])
#a#c
の葉だけを検索する :
db.tree.aggregate([
{$match:{"parent": {$regex:"^#a#c"}}},
{$graphLookup:{
from:"tree",
startWith:"$node",
connectFromField:"node",
connectToField:"parent",
as:"dep"}},
{$match:{dep:[]}},
{$project:{"_id":0, node:1}}
])
また、モデルツリー構造 を確認することをお勧めします。 、MongoDBでツリーデータ構造を使用するさまざまな方法があります。ユースケースに応じて、アプリケーションクエリの利点のために特定の構造を採用する必要があります。