首页 > 解决方案 > 如何使用 mongoose 和 node.js 更新 mongod 中存在的对象的子值?

问题描述

我想更新对象内部实际存在的特定子值,并希望我的所有剩余值都相同。我想使用猫鼬 npm 包。

例如:

basic:{
 name: "ABC",
 mobile: 1234567890,
 age: 20
},
other:{
 pincode: 123456,
 email: "abc@abc.com"
}

我的代码

 Model.findOneAndUpdate(
  { "basic.mobile": 1234567890 },
     {
           basic:{ name: "CDE"}
     },
     (err, doc) => {
       if (err) return res.send({ error: err });
       res.send(`updated`);
     }
 );

它可以工作,但它会覆盖以前的基本数据并创建一个我提供的新数据。它应该更新,但休息值也应该在那里。我怎样才能做到这一点?

标签: node.jsmongodbmongoose

解决方案


您的问题包含答案。对于过滤器,您正确地使用点运算符引用单个字段,即

"basic.mobile": 1234567890

您也应该为更新做类似的事情,即函数调用的第二个参数,您定义的方式是错误的,因为它是一个新对象 - 当您想要替换basic数据库中的整个对象时应该使用它。如果您只想更新该name字段,那么您应该使用如下所示的点运算符。

"basic.name":"CDE"

所以整个函数如下所示。

Model.findOneAndUpdate(
     { "basic.mobile": 1234567890 },
     { "basic.name": "CDE"},
     (err, doc) => {
       if (err) return res.send({ error: err });
       res.send(`updated`);
     }
 );

推荐阅读