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

Mongoは、フィールドに基づいてオブジェクトの配列内の重複を削除します

    さて、あなたは2つの方法で望ましい結果を得るかもしれません。

    クラシック

    Flatten-重複を削除します(最初に出現するものを選択します)-Group by

    db.collection.aggregate([
      {
        $unwind: "$values"
      },
      {
        $group: {
          _id: "$values.id",
          values: {
            $first: "$values"
          },
          id: {
            $first: "$_id"
          },
          name: {
            $first: "$name"
          }
        }
      },
      {
        $group: {
          _id: "$id",
          name: {
            $first: "$name"
          },
          values: {
            $push: "$values"
          }
        }
      }
    ])
    

    MongoPlayground

    モダン

    $reduce を使用する必要があります オペレーター。

    擬似コード:

    values : {
      var tmp = [];
      for (var value in values) {
          if !(value.id in tmp)
            tmp.push(value);
      }
      return tmp;
    }
    
    db.collection.aggregate([
      {
        $addFields: {
          values: {
            $reduce: {
              input: "$values",
              initialValue: [],
              in: {
                $concatArrays: [
                  "$$value",
                  {
                    $cond: [
                      {
                        $in: [
                          "$$this.id",
                          "$$value.id"
                        ]
                      },
                      [],
                      [
                        "$$this"
                      ]
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    ])
    

    MongoPlayground



    1. マングース:スキーマvsモデル?

    2. MongoDB Aggregation:合計レコード数を取得する方法は?

    3. MongoDB+Djangoのセットアップ

    4. MongoDB C#Driver2.0-ドキュメントの更新