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

我是mongo / mongoose的新手,在更新集合时注意到一个bug。 我有这个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循环发出多个写查询,而在实际情况下遇到的却很less