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

3レベルのMongoDBネストルックアップ

    「トラブル」の原因は、2番目の集計段階です-{ $unwind: "$address" }_id: 4のパーティのレコードを削除します (あなたが言うように、そのアドレス配列は空であるため)そしてパーティー_id: 1のために2つのレコードを生成します および_id: 5 (それぞれに2つのアドレスがあるため)

    • アドレスのないパーティが削除されないようにするには、preserveNullAndEmptyArraysを設定する必要があります $unwindのオプション trueへのステージ 。

    • 異なるアドレスのパーティの重複を防ぐには、$groupを追加する必要があります パイプラインへの集約ステージ。また、$projectを使用します $filterを使用したステージ 出力から空のアドレスレコードを除外する演算子。

    db.party.aggregate([{
      $lookup: {
        from: "address",
        localField: "_id",
        foreignField: "party_id",
        as: "address"
      }
    }, {
      $unwind: {
        path: "$address",
        preserveNullAndEmptyArrays: true
      }
    }, {
      $lookup: {
        from: "addressComment",
        localField: "address._id",
        foreignField: "address_id",
        as: "address.addressComment",
      }
    }, {
      $group: {
        _id : "$_id",
        name: { $first: "$name" },
        address: { $push: "$address" }
      }
    }, {
      $project: {
        _id: 1,
        name: 1,
        address: {
          $filter: { input: "$address", as: "a", cond: { $ifNull: ["$$a._id", false] } }
        } 
      }
    }]);
    


    1. Mongoengine:ConnectionError:デフォルトの接続を定義していません

    2. Redisスキャンカウント:パターンに一致するすべてのキーをSCANに返すように強制するにはどうすればよいですか?

    3. mongodbでクエリに参加する方法は?

    4. マングース、オブジェクトの配列の値を更新