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

Mongodbクエリ結合の最適化

    こういうことをしたいと思います。私はこのクエリをテストしませんでしたが、これは私があなたの代わりに試みることです。複数の結合をサポートしているため、これは3.6mongodbでのみ可能です。アイデアは、3つのコレクションすべてに参加することです。最初の参加は、Parents and Person by Parents id、およびPersons"parentsId"です。 2番目の参加者は親と祖父母です。次に、祖父母の名前で除外すると、その祖父母、彼の息子(親)、および彼の孫(人)を含むドキュメントが取得されます。次に、その人を投影するだけです。

        db.Parents.aggregate([
           {
              $lookup:{
                 from:"Person",
                 localField:"_id",
                 foreignField:"parentId",
                 as:"Person"
              }
           },
           {
              $unwind:"$Person"
           },
           {
              $lookup:{
                 from:"Grandparents",
                 localField:"grandparentId",
                 foreignField:"_id",
                 as:"Grandparents"
              }
           },
           {
              $unwind:"$Grandparents"
           },
           {$match:{Grandparents.name:"x"}},
           {$project:{Person.name:1,Person._id:1}}
    }])
    

    これでうまくいくと思います




    1. マングースによるユニットテスト

    2. サブ配列内のMongodb更新操作

    3. mongodbカーソルが期限切れになるとき

    4. MongoDB:埋め込みドキュメントの一意キー