首页 > 解决方案 > 当集合中添加记录时,findbyIdAndUpdate 不起作用

问题描述

我写了一个更新查询,它将通过 _id 找到记录并更新。在我在该集合中添加新记录之前,此代码完全可以正常工作。如果添加一条记录并进行查询,它将进入成功部分,但返回 null 而不是数据。但是当我重新启动代码并尝试相同的操作时,它工作正常。我的方法是 PUT。

accept = (req, res) => {
var query = { _id: req.params.uid };
var updatevalue = { $set: { status: 3 } };
var options = { new: true }
this._model.findByIdAndUpdate(query, updatevalue, options, (err, obj) => {
    if (err) {
        res.send(err);
    }
    else {
       res.send(obj);

    }
});

}

要求

api.abc.com/api/accept/5cfe4dd898fd225ef1cabdsd

标签: node.jsmongodbamazon-web-servicesmongoose

解决方案


通常,我们可以通过多种方式更新一条记录

  1. findOneAndUpdate()方法用于更新集合中的记录。可以使用这种方法,而不是手动查找记录然后更新它。这种方法比手动方法工作得更快。它有一个选项标志new,如果为真,它将在响应中返回更新的记录。
    User.findOneAndUpdate({_id: id},{$set:{name:user.name}},{new:true}).then((docs)=>{
        if(docs) {
           resolve({success:true,data:docs});
        } else {
           reject({success:false,data:"no such user exist"});
        }
    }).catch((err)=>{
       reject(err);
    });
  1. findByIdAndUpdate()方法用于根据 Id 更新记录。我们可以将 id 作为«Object|Number|String»_id 的值传递给查询。所以在这里,我们可以直接通过req.params.id
    User.findByIdAndUpdate(req.params.id,{$set:{name:user.name}},{new:true}).then((docs)=>{
       if(docs) {
         resolve({success:true,data:docs});
       } else {
         reject({success:false,data:"no such user exist"});
       }
    }).catch((err)=>{
        reject(err);
    })


推荐阅读