findbyIdAndUpdate 在集合中添加记录时不起作用

Chr*_*ris 4 mongoose mongodb amazon-web-services node.js

我写了一个更新查询,它将通过 _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);

    }
});
Run Code Online (Sandbox Code Playgroud)

}

要求

api.abc.com/api/accept/5cfe4dd898fd225ef1cabdsd
Run Code Online (Sandbox Code Playgroud)

小智 6

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

  1. findOneAndUpdate()方法用于更新集合中的记录。最好使用这种方法,因为执行相同操作的另一种方法是先找到记录然后更新。它可以节省时间。它包含一个像 new: true 这样的选项标志,它将返回更新的记录作为响应。
    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);
    });
Run Code Online (Sandbox Code Playgroud)
  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);
    })

Run Code Online (Sandbox Code Playgroud)