繁体   English   中英

findOne Moongose 的改变结果

[英]Changing result of the findOne moongose

我正在一个节点项目中工作,需要帮​​助。

我有回调函数,它执行方法 findOne,有 o 结果,但我无法更改结果的属性。

前任。 数据

{
 name: "John",
 age:  30,
}

前任。 回调函数。

 this._userRepository.findOne({}, (err, user) => {
        if (err) {
            return callback({ code: 404, message: "User not found" }, []);
        }

        user.name = "edson";

        return callback("", user);
  });

但是用户名在返回时不会改变。

前任。 结果

{
 name: "John",
 age:  30,
}

预期结果

{
 name: "edson",
 age:  30,
}

您实际上是在尝试更新数据库中user的值吗? 如果是这样,我认为您需要调用user.save()

您需要在返回任何内容之前使用user.save() ,如下所示,

 user.name = "edson";
 user.save();
 return callback("", user);

或使用findOneAndUpdate()如下所示

const filter = {};
const update = { name :  "edson"};

this._userRepository.findOneAndUpdate(filter, update, {upsert: true}, function(err, doc) {
    if (err) return res.send(500, {error: err});
    return res.send('Succesfully saved.');
});

有关更多详细信息,请参阅https://mongoosejs.com/docs/tutorials/findoneandupdate.html

尝试将您的代码包装在async函数中,然后运行以下代码

await this._userRepository.findOneAndUpdate({}, {$set: { name: 'edson' }});

findOneAndUpdate方法接受一个过滤器和一个包裹在 $set 键中的对象。 这种方法要快得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM