MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongo menghapus duplikat dalam array objek berdasarkan bidang

Nah, Anda mungkin mendapatkan hasil yang diinginkan dengan 2 cara.

Klasik

Ratakan - Hapus duplikat (pilih kemunculan pertama) - Kelompokkan menurut

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

Modern

Kita perlu menggunakan $reduce operator.

Kode semu:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB 'hitung ()' sangat lambat. Bagaimana kita memperbaiki/mengatasinya?

  2. Mengonversi tanggal yang disimpan mongo kembali menjadi milidetik sejak zaman Unix saat dimuat?

  3. MongoDB Banyak Indeks vs. Indeks Tunggal pada larik Sub-Dokumen?

  4. Luwak:bagaimana cara mengatur bidang skema menjadi ID?

  5. Peringatan penghentian MongoDB saat menggunakan Mongoose