gpt4 book ai didi

javascript - Mongo/Mongoose快速更新导致数据丢失

转载 作者:可可西里 更新时间:2023-11-01 10:42:22 24 4
gpt4 key购买 nike

我是 mongo/mongoose 的新手,在更新集合时发现了一个错误。我有这个 nodejs 代码:

User
.findByIdAndUpdate({ _id: id }, { $set: params })
.select('-password')
.exec(function (error, user) {
return res.json({ user: user });
});

上面的代码在定期更新时完美运行 - 但是当我向它发送垃圾邮件并发送大量请求时,最后返回的用户数据与我之后获取的用户数据不匹配:

User.findOne(...)

我如何确保这种情况不会发生,并且从更新返回的数据和从 User.findOne(...) 获取的数据始终匹配?

谢谢


编辑:

我已经像这样添加了 { 'new': true }:

User
.findByIdAndUpdate({ _id: id }, { $set: params }, { 'new': true })
.select('-password')
.exec(function (error, user) {
return res.json({ user: user });
});

但是当我发送垃圾更新然后获取用户时,我仍然得到不同的结果。


编辑 2

我想我实际上需要一种方法来知道更新是否完成,然后再调用该用户。有什么办法吗?

最佳答案

当您用大量写入向 MongoDB 发送垃圾邮件时,MongoDB 会将其排队在内存中,并在资源允许的情况下最终写入所有数据,具体取决于负载和磁盘性能。您必须等待,直到所有数据都已写入,然后才能尝试读取它们。如果您在一段时间后读取数据,您将获得正确的数据。有一个名为write-concern 的选项,它与提供对写入请求的确认有关,但不保证写入已完成。请查看:https://docs.mongodb.org/manual/reference/write-concern/

通过垃圾邮件,根据我的经验,我假设您正在使用 for 循环发出多个写入查询,这在实际情况中很少遇到

关于javascript - Mongo/Mongoose快速更新导致数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com