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

Sisipkan array di mana elemen tidak ada lagi perbarui (dengan beberapa kondisi)

Mirip dengan pertanyaan Anda sebelumnya , Anda menggunakan .bulkWrite() tetapi karena pemilihan elemen array memiliki "beberapa kondisi", ini adalah tempat Anda menggunakan $elemMatch :

db.collection.bulkWrite([
  { "updateOne": {
    "filter": { 
      "_id": "1", 
      "option": { 
        "$elemMatch": { "weight": "40", "size": "40" }
      }
    },
    "update": { 
      "$set": { "option.$.price": "300" }
    }
  }},
  { "updateOne": {
    "filter": {
      "_id": "1",
      "option": {
        "$not": {
          "$elemMatch": { "weight": "40", "size": "40" }
        }
      }
    },
    "update": {
      "$push": { "option": { "weight": "40", "size": "40",  "price": "300" } }
    }
  }},
  { "updateOne": {
    "filter": { "_id": 1 },
    "update": {
      "$setOnInsert": {
        "option": [
           { "weight": "40", "size": "40",  "price": "300" }
         ]
      }
    },
    "upsert": true
  }}
])

Jadi operasinya adalah:

  1. Uji apakah elemen array cocok dengan kondisi di $elemMatch ada dan kemudian $set nilai yang cocok.

  2. Uji elemen array adalah $not hadir dalam negasi. Anda dapat menggunakan $ne secara bergantian di setiap properti, tetapi meniadakan kondisi di mana keduanya cocok sedikit lebih bersih.

     "$elemMatch": { "weight": { "$ne": "40" }, "size": { "$ne": "40" } }
    

    Bagaimanapun Anda $push elemen array baru ketika salah satu tidak cocok dengan kriteria yang disediakan ditemukan.

  3. Coba "upsert" hanya jika dokumen utama _id tidak ditemukan, dan gunakan $setOnInsert sehingga jika dokumen ditemukan, operasi ini tidak melakukan apa-apa.

Sama seperti sebelumnya, hanya satu dari ini yang benar-benar akan menulis apa pun meskipun seluruh batch dikirim ke server.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menghindari @ dalam kata sandi dalam koneksi pymongo?

  2. Cara Memantau MongoDB dengan Prometheus &ClusterControl

  3. Periksa jumlah koneksi saat ini ke MongoDb

  4. Mongodb menambahkan bidang baru dalam dokumen yang ada, dengan posisi tertentu

  5. Memasukkan data ke array bersarang di mongodb