首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mongoose中,` `save()`是否被视为更新文档的反模式?

在Mongoose中,` `save()`是否被视为更新文档的反模式?
EN

Stack Overflow用户
提问于 2017-06-15 22:43:46
回答 2查看 176关注 0票数 2

请看下面的例子:

代码语言:javascript
复制
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秒),另一段代码将尝试更新此文档,该怎么办?这意味着来自其他代码的更改将不会被保存?

如果是,这是否意味着在MongoDB端使用findOneAndUpdate和类似的方法进行更新更好?

EN

回答 2

Stack Overflow用户

发布于 2017-06-15 22:47:26

请记住,最终的一致性是模型。Mongo最终将是一致的,因此更改将影响其他更改只是在一定程度上是正确的;但重要的是要注意,大多数情况下,这是非阻塞的。

所以真正的答案是不...但答案是肯定的,但它最终会自我修正。

save()是反模式吗?这真的是由你决定的..如果你采用更多的面向对象而不是函数式,我认为可以使用

票数 1
EN

Stack Overflow用户

发布于 2017-06-16 17:35:21

后跟savefind只不过是更新一个包含所有字段的文档。您最好不要使用find,而只使用update重新填充所有字段的文档。

查找和保存之间的时间间隔可能在几秒到几分钟之间。例如,向用户(find)显示一个编辑表单,用户修改某些字段并在15分钟后单击更新按钮(save);其他一些客户端在此期间所做的任何更改都将被覆盖。

findOneAndUpdate和类似的方法是原子的和服务器端的(Mongo),它通过锁定来处理concurrency。除非您需要先处理文档然后保存,否则我认为update方法通常更适合。Thisthis可以很好地回答类似的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44570482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档