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

マングースは、複数のコレクションを1つの配列にマップする方法を集約します

    このような状況では、$facet 受信データの分類に役立ちます

    db.Collection_A.aggregate([
      { $unwind: "$includes },
      {
        "$facet": {
          "joinB": [            
            {
              "$lookup": {
                "from": "Collection_B", "localField": "includes.includes_id",
                "foreignField": "_id", "as": "includes.includes_list"
              }
            },
            {
              "$group": {
                "_id": "$_id",
                "name": { "$first": "$name" },
                includes: { $push: "$includes" }
              }
            }
          ],
          "joinC": [            
            {
              "$lookup": {
                "from": "Collection_C", "localField": "includes.includes_id",
                "foreignField": "_id", "as": "includes.includes_list"
              }
            },
            {
              "$group": {
                "_id": "$_id",
                "name": { "$first": "$name" },
                includes: { $push: "$includes" }
              }
            }
          ],
          "joinD": [
            {
              "$lookup": {
                "from": "Collection_D", "localField": "includes.includes_id",
                "foreignField": "_id", "as": "includes.includes_list"
              }
            },
            {
              "$group": {
                "_id": "$_id",
                "name": { "$first": "$name" },
                includes: { $push: "$includes" }
              }
            }
          ],
          
        }
      },
      {
        $project: {
          combined: {
            "$concatArrays": [ "$joinB", "$joinC", "$joinD" ]
          }
        }
      },
      { "$unwind": "$combined" },
      {
        "$replaceRoot": { "newRoot": "$combined" }
      },
      {
        "$project": {
          _id: 1,
          name: 1,
          includes: {
            $filter: {
              input: "$includes",
              cond: {
                $ne: [ "$$this.includes_list",[] ]
              }
            }
          }
        }
      }
    ])
    

    作業中Mongo遊び場

    注:これは、あなたが従う一種のアンチパターンだと思います。プロジェクトの初期段階にある場合は、私が間違っていない限り、構造を変更することをお勧めします。




    1. Mongodb 4+ findOneAndUpdate()returnNewDocumentが機能しない

    2. なぜ2dsphereインデックスを作成するのですか?クエリするとs2cursorが表示されますか?

    3. pymongo-ルックアップで一致させる方法は?

    4. Elasticsearchでmongoコネクタを使用してカスタムマッピングを行う方法