Идея состоит в том, что вы хотите, чтобы «Сохранить» работало только на той версии, которая у вас есть (которая должна быть самой последней).
Использование .save здесь вам не поможет.
Вы можете использовать одну из двух функций:
обновление.
findOneAndUpdate
Идея в том, что вы должны найти и сохранить за одну атомную операцию. И в объекте условий вы не только отправляете _id, но также отправляете __v, который является идентификатором версии. (Что-то похожее на приведенный ниже пример)
this.update({_id: document._id, __v: document.__v}, {$set: document, $inc: {__v: 1}}, result.cb(cb, function(updateResult) {
...
});
Скажем, вы прочитали версию 10, теперь вы готовы обновить ее (сохранить). Он будет работать только в том случае, если найдет документ с определенным идентификатором и версией. Если в это время база данных получит более новую версию (версию 11), обновление не будет выполнено.
Кстати, у MongoDb теперь есть транзакции, вы, возможно, захотите разобраться в этом, потому что транзакция B заставит ваш код ждать, пока транзакция A не завершит свою атомарную операцию, что было бы лучшей моделью, чем обновление и сбой, а затем попытка снова ...