sql >> データベース >  >> NoSQL >> MongoDB

Mongodb:木の葉だけを取得します

    フィールド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でツリーデータ構造を使用するさまざまな方法があります。ユースケースに応じて、アプリケーションクエリの利点のために特定の構造を採用する必要があります。




    1. Mongodb C#ドライバーは、配列が空のときにすべてのサブ配列要素を更新できませんでした

    2. mongoコレクションのサブドキュメント配列のページ付け/スライスされたデータを取得するにはどうすればよいですか?

    3. RedisのCPU使用率を表示するために使用されるユニット

    4. mongodbアグリゲートでのみ最新のサブドキュメントを含むドキュメントを返す