我知道有很多线程遇到这个问题,但是那里提出的解决方案都没有对我有用,通常是因为问题太具体了。在我解释我的问题之前,这是我的代码:
User.findOne({authId: req.user.authId}, function(err, user){
if(err) console.error(err);
for(var i = 0; i<user.bot.messages.length; i++){
if(user.bot.messages[i].name === req.body.commandName){
console.log('found it');
user.bot.messages[i].description = req.body.commandDescription;
}
}
user.save(function(err){
if(!err){
console.log('saving user');
}
});
});
此代码应该做的是在用户提交具有所述描述的表单后更新消息的描述。通常在使用mongoose进行更新时,我只使用findOneAndUpdate()但在这种情况下不会起作用,因为它只接受点表示法并且我事先并不知道哪条消息正在更新。
不过,这应该也可以,对吧?多个console.log()语句仅用于调试。但事情是,我在提交表格时会在控制台中看到所有这些陈述,所以在这种情况下我真的不知道问题所在。
它只是没有保存,但我也没有收到任何错误。
我刚刚在mongoose docs中找到了this。但是,如果我事先不知道确切的路径,我该如何使用markModified()?