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

Memperbarui Kamus di Mongodb

Tidak yakin apa yang sebenarnya Anda inginkan. Pada dasarnya ada dua jenis pembaruan di MongoDB:Anda dapat melakukan pembaruan atom , atau ganti dokumen .

Mengganti dokumen seringkali lebih mudah , karena memungkinkan Anda untuk menggunakan operasi C# standar untuk melakukan modifikasi dan akan mengevaluasi kembali properti yang dihasilkan dan sejenisnya:

var user = new User { Name = "John Doe", Quests = 
   new Dictionary<string, Tuple<string, string>> { 
       { "hoho", new Tuple<string, string>("A", "A-Item") } } };
users.InsertOneAsync(user).Wait();
user.Quests = new Dictionary<string, Tuple<string, string>> { 
       { "hoho Modified", new Tuple<string, string>("B", "B-Item") } };
users.ReplaceOneAsync(p => p.Id == user.Id, user);

Namun, terkadang diperlukan untuk menggunakan pengubah atom, seperti $push , $pull , $set , $addToSet , dll. karena masalah konkurensi. Saya biasanya menganggap itu ide yang buruk untuk melakukan operasi kompleks pada objek tertanam yang kompleks dengan cara ini, karena ada kemungkinan besar konsistensi objek (dalam arti ACID, atau 'invarian objek' ) tidak dapat diperiksa.

Misalkan pengguna tidak boleh memiliki lebih dari 3 misi aktif sekaligus, siapa yang memastikan aturan ini dipatuhi? Itu biasanya tanggung jawab kode, dan invarian kompleks tidak dapat diperiksa oleh database.

Jika Anda masih ingin menggunakan operator atom itu, saya sarankan Anda mengajukan pertanyaan baru karena itu sangat tergantung pada detailnya (kamus, secara default, diserialisasikan sebagai dokumen, Tuple sebagai array, dan mereka memerlukan pengubah atom yang berbeda di MongoDB). Misalnya, untuk menambahkan item baru ke kamus, gunakan $set :

users.UpdateOneAsync(p => p.Id == user.Id, 
  Builders<User>.Update.Set("Quests.hoho Modified", 
     new Tuple<string, string>("B", "B-Item")));



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $arrayElemAt

  2. Kerangka Agregasi Mongodb:Apakah $group menggunakan indeks?

  3. Memasukkan data ke array bersarang di mongodb

  4. Bagaimana cara mengkonfigurasi driver MongoDB Java MongoOptions untuk penggunaan produksi?

  5. String proyek agregasi MongoDB ke ObjectId