Nodejs猫鼬| findOneAndUpdate无法正常工作

时间:2019-06-29 08:27:20

标签: node.js mongodb express mongoose

我正在使用express.js和mongodb以及mongoose模块处理节点js应用程序来处理数据库。

在一种情况下,我需要使用languages方法更新用户属性findOneAndUpdate。此属性是一个对象数组,看起来应该像[{"language":"Ar","level":4}]

当我使用以下nodejs代码对其进行更新时:

User.findOneAndUpdate({_id:mongoose.Types.ObjectId(req.body.id)}, 
 {$set:{[req.body.key]:req.body[req.body.key]}},(err,doc)=>{

  console.log(req.body) // {id:5d1619fa7c11fa102210ef86,"languages":[{"language":"Ar","level":4}],key:"languages"}
  if (!err) {
    res.json(200,doc);
  }else{
    res.json(500,{error:err});

  }
})

我得到以下结果

enter image description here

但是当我尝试从mongo shell进行同样的操作

  

db.users.findOneAndUpdate({“ _ id”:ObjectId(“ 5d1619fa7c11fa102210ef86”)},{'$ set':{“ languages”:[{“ language”:“ Ar”,“ level”:4}] }}

我得到正确的结果

enter image description here

这是正确的预期结果。

任何想法,为什么nodejs片段无法正常工作。 预先感谢。

1 个答案:

答案 0 :(得分:0)

我认为您无法在成功运行更新后取回更新的结果。您需要在更新查询中传递new : true作为第三个参数。

默认情况下,mongodbupdate之后返回旧文档,但是您可以指定在查询中返回更新后的文档。

尝试一下:

User.findOneAndUpdate({_id:mongoose.Types.ObjectId(req.body.id)}, 
 {$set:{[req.body.key]:req.body[req.body.key]},{new:true},(err,doc)=>{
  ...
  //doc will be updated doc here
})