У меня есть пара мест в моем приложении, где используется мангуст, где мне нужно обрабатывать одновременную модификацию.Обработка одновременной модификации w/mongoose
Я знаю, что есть версия '__v' во всех моих документах. Большинство все, что я смотрю на точках обратно в этот блог:
http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning
Каких очертаний, используя поле __v для защиты от одновременного изменения массива в пределах документа. то есть:
posts.update({ _id: postId, __v: versionNumber }
, { $set: { 'comments.3.body': updatedText }})
Следует ли использовать мангуст __v автоматически для подтверждения документов при их сохранении? Или вы всегда должны добавить его в свой запрос?
'mongoose.set ("отлаживать", правда)' ответить на ваш вопрос будет для вас. Не то, чтобы я был поклонником этого процесса. Тестирование для определенного значения '__v' означает, что у вас уже есть эта информация из документа и что вы вообще не хотите изменять контент, если это значение/версия не совпадает. Это почти никогда не бывает реалистичным, и на самом деле ваше приложение не должно заботиться об этом, или обновления должны применяться по-другому, когда требуются такие вещи, как «история». i.e Добавить в массив. Если вы создадите правильные шаблоны доступа, у вас не будет таких проблем. –
Быстрый пример из вашего вышеуказанного кода. Вы должны ** никогда не писать «comments.3.body», подразумевая, что «тело» должно указывать «тело» в этой позиции индекса в массиве. Вместо этого вы должны написать '.update ({" _id ": postId," comments._id ": commentId}, {" $ set ": {" comments. $. Body ": updatedText}})'. Таким образом, вы никогда не обновляете ничего, кроме элемента, который, как вы знаете, действительно хотите, а не что-то еще, что теперь может быть в положении. Единственное, с чем поможет '__v', - это избегать двух пользователей, изменяющих один и тот же комментарий одновременно. Но было бы лучше разрешить изменения только автору. –