MongoDBのコレクションの再帰検索

RAR

私は、ツリー構造でのMongoDBにおける文書のリストを持っている親の参照を持つモデルツリー構造パターンを使用しました。私は、「名前」プロパティ与えられ、(ルートまで)の祖先のリストを返す単一の集約クエリをしたいです。

構造:

{
  '_id': '1',
  'name': 'A',
  'parent': '',
},
{
  '_id': '2',
  'name': 'B',
  'parent': 'A',
},
{
  '_id': '3',
  'name': 'C',
  'parent': 'B',
},
{
  '_id': '4',
  'name': 'D',
  'parent': 'C',
}

集計結果:(与えられた、名前= 'D')

{
  '_id': '4',
  'name': 'D',
  'ancestors': [{name:'C'}, {name:'B'}, {name:'A'}]
}

Note:現在、ドキュメントの構造を変更できません。それは多くの問題を引き起こします。祖先の配列でモデルツリー構造を使用することを提案する多くのソリューションを見ましたしかし、私は今それを使用することはできません。単一の集計クエリを使用して上記のパターンでそれを達成する方法はありますか?ありがとうございました

styvane

MongoDB 3.4以降、これはAggregationFrameworkで実行できます。

パイプラインの最初で最も重要なステージは$graphLookupステージです。$graphLookup「親」フィールドと「名前」フィールドを再帰的に照合できます。その結果、各「名前」の祖先を取得します。

パイプラインの次の段階は、$match関心のある「名前」を選択するだけ段階です。

最終段階である$addFieldsか、$project我々が使用して「先祖」配列に式を適用する段階$map配列演算子。

もちろん、$reverseArray演算子を使用して、期待される結果を得るために配列逆にします

db.collection.aggregate(
    [ 
        { "$graphLookup": { 
            "from": "collection", 
            "startWith": "$parent", 
            "connectFromField": "parent", 
            "connectToField": "name", 
            "as": "ancestors"
        }}, 
        { "$match": { "name": "D" } }, 
        { "$addFields": { 
            "ancestors": { 
                "$reverseArray": { 
                    "$map": { 
                        "input": "$ancestors", 
                        "as": "t", 
                        "in": { "name": "$$t.name" }
                    } 
                } 
            }
        }}
    ]
)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mongodbで複数のコレクションを検索する

分類Dev

mongodbで複数のコレクションを検索する

分類Dev

コレクション内のMongodb検索特殊文字(\)

分類Dev

mongodb-他のコレクションの値の数を検索します

分類Dev

MongoDBはコレクション内の最新の日付を検索します

分類Dev

MongoDBのすべてのコレクション配列を検索します

分類Dev

MongoDB:複数のコレクションの最適化された検索

分類Dev

MongoDb:複数のコレクションを検索する方法は?

分類Dev

Mongodbは複数のコレクションを検索します

分類Dev

mongodbはコレクションの検索に引数を渡します

分類Dev

コレクションの再帰的メソッド

分類Dev

単純なコレクションでのSparkRDD再帰操作

分類Dev

PythonとC#のコレクションの検索

分類Dev

PythonとC#のコレクションの検索

分類Dev

CloudFirestoreコレクションのパターンで検索

分類Dev

特定のフィールドを持つmongodbのすべてのコレクションを検索する

分類Dev

Mongodbは、コレクション内の上位10個の最大の配列アイテムを検索します

分類Dev

mongodbはコレクション内の個別のドキュメントを検索します

分類Dev

文字列コレクションを検索する最速の方法

分類Dev

Meteorコレクション:配列内の要素を検索

分類Dev

laravel 5.5雄弁、関係コレクションの検索

分類Dev

コレクションビューの検索機能

分類Dev

Laravelコレクションの検索値

分類Dev

StackExchangeRedisコレクションでの検索

分類Dev

mongoosasticで複数のコレクションを検索する

分類Dev

MongoDB-コレクション内の一意の名前を検索する

分類Dev

MongoDbコレクションで空のオブジェクトプロパティを検索する

分類Dev

コレクションの要素を再帰的に蓄積します

分類Dev

コレクションの遅延を再帰的に計算する方法

Related 関連記事

  1. 1

    mongodbで複数のコレクションを検索する

  2. 2

    mongodbで複数のコレクションを検索する

  3. 3

    コレクション内のMongodb検索特殊文字(\)

  4. 4

    mongodb-他のコレクションの値の数を検索します

  5. 5

    MongoDBはコレクション内の最新の日付を検索します

  6. 6

    MongoDBのすべてのコレクション配列を検索します

  7. 7

    MongoDB:複数のコレクションの最適化された検索

  8. 8

    MongoDb:複数のコレクションを検索する方法は?

  9. 9

    Mongodbは複数のコレクションを検索します

  10. 10

    mongodbはコレクションの検索に引数を渡します

  11. 11

    コレクションの再帰的メソッド

  12. 12

    単純なコレクションでのSparkRDD再帰操作

  13. 13

    PythonとC#のコレクションの検索

  14. 14

    PythonとC#のコレクションの検索

  15. 15

    CloudFirestoreコレクションのパターンで検索

  16. 16

    特定のフィールドを持つmongodbのすべてのコレクションを検索する

  17. 17

    Mongodbは、コレクション内の上位10個の最大の配列アイテムを検索します

  18. 18

    mongodbはコレクション内の個別のドキュメントを検索します

  19. 19

    文字列コレクションを検索する最速の方法

  20. 20

    Meteorコレクション:配列内の要素を検索

  21. 21

    laravel 5.5雄弁、関係コレクションの検索

  22. 22

    コレクションビューの検索機能

  23. 23

    Laravelコレクションの検索値

  24. 24

    StackExchangeRedisコレクションでの検索

  25. 25

    mongoosasticで複数のコレクションを検索する

  26. 26

    MongoDB-コレクション内の一意の名前を検索する

  27. 27

    MongoDbコレクションで空のオブジェクトプロパティを検索する

  28. 28

    コレクションの要素を再帰的に蓄積します

  29. 29

    コレクションの遅延を再帰的に計算する方法

ホットタグ

アーカイブ