У меня есть большая логическая проблема с использованием Node/Mongoose/Socket.io ... Предположим, у меня есть модель сервера, которую часто называют одновременно в моем приложении, некоторые вызовы включают обновление данных в модели.Mongoose асинхронные конфликты с несколькими конфликтами
db.Server.findOne({_id: reference.server}).exec(function(error, server) {
catches.error(error);
if (server !== null) {
server.anything = "ahah";
server.save(function(error) { });
}
}
Иногда 2 люди будут называть это в то же самое время, в то время как первый человек будет экономить() другой парень может уже findOne «сервер» и получил «старый объект», который не является до -to-date и сохранить().
Большая проблема здесь, когда второй парень сохранит() «сервер» («старый объект»), он буквально перепишет изменения первого ... Вы можете представить, какие большие конфликты он создаст по моему заявлению.
Я думал об изменении всех методов save() для обновления(), которые устраняют проблему, но в какой-то момент в проекте очень сложно использовать update() напрямую, а не как практично.
Есть ли способ «заблокировать» вызов findOne(), когда кто-то его обновляет? Например, когда вы находитеOne(), вы также говорите «эй, я скоро это обновлю, поэтому не позволяйте людям находить это прямо сейчас» (с Mongoose или даже MongoDb)
Это было какое-то время, когда я ищу, t найти ответ :(
Надеюсь, вы поняли мою проблему;) спасибо!
Nope. См. Http://stackoverflow.com/questions/11076272/its-not-possible-to-lock-a-mongodb-document-what-if-i-need-to – JohnnyHK
, тогда как вы можете создать сайт с людьми на нем с монго? ... – Laurent
Вы структурируете свою схему так, чтобы все ваши модификации документа могли быть выполнены с использованием атомных 'update' вызовов. – JohnnyHK