我在使用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);
}
);