MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Операциите с документи MongoDB са атомарни и изолирани, но последователни ли са?

Може да има други начини да постигнете това, но един подход е да създадете версия на вашите документи и да издадете актуализации само срещу версията, която потребителят е прочел преди това (т.е. да се уверите, че никой друг не е актуализирал документа от последното му четене). Ето кратък пример за тази техника с помощта на 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}

забележка в горното, ключът "n" е 1, което показва, че документът е актуализиран

>>> 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}

тук, където се опитахме да актуализираме спрямо грешната версия, ключът "n" е 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}

Обърнете внимание, че тази техника разчита на използване на безопасно записване, в противен случай не получаваме потвърждение, указващо броя на актуализираните документи. Вариация на това би използвала findAndModify команда, която или ще върне документа, или None (в Python), ако не е намерен документ, съответстващ на заявката. findAndModify ви позволява да върнете или новата (т.е. след прилагане на актуализациите), или старата версия на документа.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. как да актуализирате и вмъквате записи в php с помощта на mongodb

  2. Golang mongodb агрегиране

  3. Как да извлечете отделни стойности от база данни на mongo с помощта на Waterline и Sails.js (версия 0.10)?

  4. MongoDB $милисекунда

  5. Повторете цялата база данни на Mongo