Является ли std :: string частью STL?

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

note выше, ключ «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 позволяет вам возвращать либо новый (то есть после применения обновлений), либо в старую версию документа.

37
задан kennytm 12 May 2011 в 03:50
поделиться