node.js - 如何使用 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`);
}
);
它可以工作,但它会覆盖以前的基本数据并创建一个我提供的新数据。它应该更新,但休息值也应该在那里。我怎样才能做到这一点?
解决方案
您的问题包含答案。对于过滤器,您正确地使用点运算符引用单个字段,即
"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`);
}
);
推荐阅读
- javascript - Puppeteer:无法点击输入[type=radio]
- java - Recycle view not displaying data on the first instance
- javascript - jQuery在表单中验证序列号
- intellij-idea - 在 IntelliJ 中设置 SonarLint 时出现异常
- apache-spark - Spark History - Log timestamps have wrong time zone
- java - 最好的静态方法和非静态方法
- c# - Using the VLC ActiveX plugin to watch youtube videos C#
- excel - 使字符串中的多个但单独的字符变为粗体
- html - How would I make this div responsive
- reactjs - Enzyme - how to test that a child receives context