【问题标题】:Changing result of the findOne moongose更改 findOne mongoose 的结果
【发布时间】:2021-02-12 00:57:32
【问题描述】:

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

我有回调函数,执行方法 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,
}

【问题讨论】:

    标签: javascript node.js mongodb mongoose callback


    【解决方案1】:

    您需要在返回任何内容之前使用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

    【讨论】:

      【解决方案2】:

      您是否真的在尝试更新数据库中user 的值?如果是这样,我认为您需要致电user.save()

      【讨论】:

      • 是的,我尝试用user.save()保存,但是没有用新名字保存。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 2018-11-08
        • 1970-01-01
        • 2015-10-26
        • 2017-11-16
        • 2019-10-27
        • 2019-05-31
        相关资源
        最近更新 更多