猫鼬更新文档,甚至不运行save()函数

时间:2019-04-05 10:30:12

标签: mongoose document updating

我正在使用快递。 在从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()路径,则不会更新。

1 个答案:

答案 0 :(得分:1)

发生的事情是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);