作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
var userSchema = new Schema({
name: { type: String, default: null },
contacts: {
mobileNumber: {
countryCode: { type: String, default: null },
digits: { type: String, default: null }
},
email: { type: String, default: null },
facebook: { type: String, default: null },
googlePlus: { type: String, default: null },
twitter: { type: String, default: null },
linkedin: { type: String, default: null }
}}, { timestamps: true });
我只想更新此架构的特定嵌套字段。为此,我所做的是,
updateUser: function (userId, patchObject) {
var conditions = { "_id": userId };
User.update(conditions,{$set:patchObject});
}
但问题是,如果 patchObject 是 {contacts:{email:"abc@aaa.com"}} 它会正确更新电子邮件,但它会替换整个联系人对象,我会丢失所有联系人对象其他字段的预定义值。 (例如: Facebook )
Google 的建议是这样的,
User.update(conditions,{"contacts.email":"abc@aaa.com"});
但问题是我需要一种动态的方式来对任何类型的对象执行此操作。我无法对所有可能的值进行硬编码。 有没有办法动态更新嵌套字段而不替换其他内容?
最佳答案
恕我直言,在 mongoose 中进行此类更新的最佳且最简单的方法是使用 save()
方法。它允许您将 mongodb 记录作为纯 JavaScript 对象处理,因此在我的 Node 网站上我尝试:
User.findOne( { email: email },
(err, user) => {
// modify your "data", probably with a callback chain
在其他一些函数中,您可以user.save()
。当然,有 $set
解决方法,但如果您只想为用户完成简单的更新,那么它就有点矫枉过正了。通过这种方法,我什至可以使用 async
库在入职期间轻松链接用户记录上的一系列更新。
关于javascript - 如何在 Mongoose 中动态更新嵌套字段对象而不更新整个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47952512/
我是一名优秀的程序员,十分优秀!