猫鼬更新文档甚至没有 运行 save() 函数

Mongoose Updating document without even running save() function

我正在使用快递。 在从 Api 发送响应之前,我在 MongoDb 中有文件路径。 我在 api Url 前面加上文件路径 喜欢

song.path = url + song.path;
res.send(song);

但是这样做是为了更新 mongodb 中的路径,即使我没有保存此文档,我只是发送响应

我试过了

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);

它应该只更新响应的 属性.. 不在 Db

更新

如果我注释掉 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 });

或者您可以 await 保存然后改变响应对象,如果您想在发送响应之前处理错误,这很好。

const song = await Song.findOne({ 'lastPlayed': false }).sort("-totalRating");
song.lastPlayed = true;
await song.save();
song.path = url + song.path;
res.send(song);