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

Perbarui objek bersarang di MongoDB jika ada, jika tidak tambahkan

Untuk menyisipkan dokumen jika tidak ada dilakukan dengan cara upsert dan jika Anda ingin memperbarui dokumen yang disematkan bersyarat Anda memerlukan operator $ positional. Jadi, Anda perlu menggunakan keduanya dalam kueri untuk mengimplementasikan fungsi di atas.

Tetapi saat ini mongodb tidak mendukung pemasangan dengan $ operator posisional

Jadi yang Anda inginkan saat ini tidak mungkin dilakukan dalam satu kueri, atau Anda dapat melakukannya dalam dua kueri.

Pertama

db.collection('ratings').update(
  {"refid":refid, "votes.ip": ip},
  {
     $set: { "votes.$.rating":rating }
  }
)

Ini mengembalikan jumlah dokumen yang diperbarui, jika 1 tidak apa-apa, dan jika 0 Anda perlu mendorong rekor baru.

db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
    {$push: { votes: { "ip":ip , "rating":rating  }}
})

Ada juga tiket jira untuk operator posisi dan upserting, silakan pilih masalah ini jika Anda menginginkan fungsi ini di mongodb. Di bawah ini adalah tautan masalah

https://jira.mongodb.org/browse/SERVER-3326

(EDIT :Tiket jira ditutup dengan Won't Do pada bulan Juni 2019)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Membuat Spark, Python, dan MongoDB bekerja bersama

  2. Apakah ada cara untuk memulihkan dokumen yang baru dihapus di MongoDB?

  3. MongoDB Hubungan Satu ke Banyak

  4. Cara mendapatkan item apa pun (Titik, LineString, Poligon) di dalam kotak pembatas di mongodb

  5. Cara melakukan pencarian wildcard di MongoDB menggunakan Java