Mongoose更新文档时甚至不运行save()函数
我在用快车。 在从Api发送响应之前,我在MongoDb中有文件路径。 我正在用文件路径预加api Url 像 但是它也更新了mongodb中的路径,即使我没有保存这个文档,我也只是发送响应Mongoose更新文档时甚至不运行save()函数,mongoose,document,updating,Mongoose,Document,Updating,我在用快车。 在从Api发送响应之前,我在MongoDb中有文件路径。 我正在用文件路径预加api Url 像 但是它也更新了mongodb中的路径,即使我没有保存这个文档,我也只是发送响应 const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating"); song.lastPlayed = true; song.save(); res.send({ ...song, path: url + song.p
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
song.save();
res.send({ ...song, path: url + song.path });
我试过了
const newSong = song;
newSong.path = url + newSong.path;
res.send(newSong)
)
但这并没有帮助,文档仍在更新中
这是我的控制器
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
song.save();
song.path = url + song.path;
res.send(song);
它应该只更新响应的属性。。不在数据库中
更新
如果我注释掉
song.save()
路径不会得到更新 发生的事情是,doc.save()
是异步的,当您改变对象并发送响应时,doc.save()
仅在主线程之后执行,这就是为什么song.path=url+song.path代码>将副本获取到mongoDB,即使您认为以前保存过它
您可以仅为响应创建一个新对象
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
song.save();
res.send({ ...song, path: url + song.path });
或者您可以等待
保存,然后为响应修改对象,如果您想在发送响应之前处理错误,这是很好的
const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
await song.save();
song.path = url + song.path;
res.send(song);
歌曲是模型的一个实例,如果您要保存它,因为它包含所有必需的字段,包括change和id,它将更新它。如果只想更改响应,请不要在此处进行保存呼叫。