更改 findOne 猫鼬的结果

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

但是 return 中的用户名没有变化。

例如。结果

{
 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 键中的对象。这种方法快很多。