Rowversion или версия документа в Mongodb

Что было бы хорошим способом сделать версионирование строк в mongodb. Сервер Sql имел поле обращения к строке, которое автоматически увеличивалось при обновлении строки на основе относительного времени, в течение которого сервер SQL отслеживался в базе данных. Хотите знать, как будет выглядеть хорошая схема в монго для того же самого?

1 ответ

В MongoDB нет встроенной поддержки управления версиями строк, такой, какой вы упоминаете для SQL-сервера.

Однако вы всегда можете добавить поле версии в свои документы. Затем, когда бы вы ни захотели обновить документ, вы должны использовать команду findAndModify, чтобы сделать это атомарно. Каждое такое атомарное обновление также должно увеличивать номер версии документа. Например, предположим, что коллекция foo содержал документ { "_id" : "example", "a" : 3, "version" : 1 }, Следующие атомарные множества a поле до 9 и увеличивает номер версии, используя оболочку mongo:

db.foo.findAndModify({
  query: {_id: "example"},
  update: {$set: {a: 9}, $inc: {version: 1}}
});

По умолчанию возвращаемым документом является состояние документа до применения обновления. Чтобы вернуть измененную версию документа, добавьте new: true на запрос.

Обратите внимание, что если вам не нужна копия измененного документа, вы можете просто использовать update вместо findAndModify (то есть findAndModify подходит для обновления и возврата документа за один атомарный шаг, в противном случае обновление так же хорошо).

Другие вопросы по тегам