请看下面的例子:
const myDoc = await model.findById(id).exec();
// here runs long running operation which can take about 2-3 secs
myDoc.name = "Updated Name";
myDoc.save()
使用此模式更新文档是否可以?如果在签出文档和保存文档(需要2-3秒)之间另外一段代码会尝试更新此文档怎么办?这意味着不会保存来自其他代码的更改?
如果是,是否意味着使用findOneAndUpdate
和类似方法在MongoDB端进行更新会更好?
答案 0 :(得分:1)
请记住,最终的一致性就是模型。 Mongo最终会保持一致,所以变化只会影响其他变化;但重要的是要注意,大部分时间这都是在mongo方面没有阻塞。
所以真正的答案是否定的......但是答案是肯定的,但最终会纠正自己。
save()是反模式吗?这真的取决于你..如果你采取更多的OO而不是功能我认为可以使用
答案 1 :(得分:0)
case codePush.SyncStatus.UPDATE_INSTALLED:
self.setState({modalVisible: true});
break;
后跟find
只不过是用所有字段更新文档。您可能不会save
而只是find
文档会重新填充所有字段。
查找和保存之间的时间间隔可以是几秒到几分钟。例如,向用户显示的编辑表单(update
)会修改某些字段并在15分钟后点击更新按钮(find
);其他客户之间的任何更改都将被覆盖。
save
和类似的方法是原子和服务器端(mongo),它通过锁定来处理concurrency。除非您需要处理文档然后保存,我认为findOneAndUpdate
方法通常更适合。 This和this SO回复在回答类似问题方面做得很好。