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

Operasi Dokumen MongoDB bersifat Atom dan Terisolasi, tetapi Apakah Konsisten?

Mungkin ada cara lain untuk mencapai hal ini, tetapi satu pendekatan adalah dengan membuat versi dokumen Anda, dan mengeluarkan pembaruan hanya terhadap versi yang telah dibaca pengguna sebelumnya (yaitu, memastikan bahwa tidak ada orang lain yang telah memperbarui dokumen sejak terakhir dibaca). Berikut adalah contoh singkat dari teknik ini menggunakan pymongo:

>>> db.foo.save({'_id': 'a', 'version': 1, 'things': []}, safe=True)
'a'
>>> db.foo.update({'_id': 'a', 'version': 1}, {'$push': {'things': 'thing1'}, '$inc': {'version': 1}}, safe=True)
{'updatedExisting': True, 'connectionId': 112, 'ok': 1.0, 'err': None, 'n': 1}

perhatikan di atas, kunci "n" adalah 1, menunjukkan bahwa dokumen telah diperbarui

>>> db.foo.update({'_id': 'a', 'version': 1}, {'$push': {'things': 'thing2'}, '$inc': {'version': 1}}, safe=True)
{'updatedExisting': False, 'connectionId': 112, 'ok': 1.0, 'err': None, 'n': 0}

di sini di mana kami mencoba memperbarui versi yang salah, kunci "n" adalah 0

>>> db.foo.update({'_id': 'a', 'version': 2}, {'$push': {'things': 'thing2'}, '$inc': {'version': 1}}, safe=True)
{'updatedExisting': True, 'connectionId': 112, 'ok': 1.0, 'err': None, 'n': 1}
>>> db.foo.find_one()
{'things': ['thing1', 'thing2'], '_id': 'a', 'version': 3}

Perhatikan bahwa teknik ini bergantung pada penggunaan penulisan yang aman, jika tidak, kami tidak mendapatkan pengakuan yang menunjukkan jumlah dokumen yang diperbarui. Variasi pada ini akan menggunakan findAndModify perintah, yang akan mengembalikan dokumen, atau None (dengan Python) jika tidak ada dokumen yang cocok dengan kueri yang ditemukan. findAndModify memungkinkan Anda mengembalikan dokumen versi baru (yaitu setelah pembaruan diterapkan) atau versi lama.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. spring mvc rest respon json dan xml

  2. OData Jaydata - permintaan pembaruan odata mengembalikan kesalahan 404 (SAPUI5, node)

  3. Masalah dengan mengonfigurasi pengguna dan menghubungkan ke Mongo dengan PHP

  4. Pencarian rekursif pada koleksi di MongoDB

  5. Bagaimana cara membuat koneksi database Mongo di context.xml di proyek web Java?