Mongoose collection.update不会更新文档



我在使用Mongoose的update函数时遇到问题。基本上,我试图修改的文档没有得到更新。

这是代码:

const user = 'Joe Bloggs'
const salt = await bcrypt.genSalt()
const pwStr = 'simplepassword'
const hashedPassword = await bcrypt.hash(pwStr, salt)
User.update({user_name: user }, { $set: { password: hashedPassword }}, function(err, doc) {
if (err) console.log('Error ', err);
console.log('Updated Doc -> ', doc); // returns un-updated doc
});

正如你所看到的,没有太多问题。我认为唯一可能导致问题的是bcrypt函数,但它们似乎正在工作,hashedPassword注销得很好。

回调记录了文档,但它没有更新,当我在Mongo shell中检查它时,它确实没有更新。

我以前尝试过findOneAndUpdate,但它似乎已被弃用。

因此,我尝试了findOne,但这也未能更新文档。这是在找到的用户上使用save的基本代码。

User.findOne({user_name: user}).then(async function(user) {
user.password = 'easypassword';
await user.save();
} 
});

我尝试在shell中使用相同的{ $set: {...}}语法使用update,它很有效。

如果有人能告诉我,当我尝试使用Mongoose函数时,为什么这个操作不起作用,我将不胜感激。提前感谢!

编辑

我已经尝试了下面的建议代码:

const res = await User.updateOne([filter], [query]); 

res注销时,返回以下信息:

{ acknowledged: false }

这出现在MongoDB文档中,与";写关注";设置,但我不知道从那里去哪里。

update实际上是不推荐使用的。

findOneAndUpdate和其他mongoose更新方法一样,默认情况下返回未更新的对象。将选项new设置为true将返回更新后的单据。

另一种选择是updateOne

User.findOneAndUpdate(
{ user_name: user },
{ $set: { password: hashedPassword } },
{ new: true },
function (err, doc) {
if (err) console.log("Error ", err);
console.log("Updated Doc -> ", doc);  
}
);

最新更新