如何更新嵌套字段对象而不在 Mongoose 中动态更新整个对象?

唐·拉吉塔·迪萨纳亚克
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:"[email protected]"}}它会正确更新电子邮件,但它会替换整个联系人对象,其中我丢失了其他字段的所有预定义值。(例如:脸书)

谷歌建议的是这个,

User.update(conditions,{"contacts.email":"[email protected]"});

但问题是我需要一种动态的方式来为任何类型的对象做到这一点。我无法对所有可能的值进行硬编码。有没有办法动态更新嵌套字段而不替换其他东西?

kaushik94

恕我直言,在猫鼬中进行此类更新的最佳和最简单的方法是使用该save()方法。它允许您将 mongodb 记录作为纯 javascript 对象处理,因此在我的节点网站上,我尝试:

    User.findOne( { email: email },
      (err, user) => {
      // modify your "data", probably with a callback chain

在其他一些功能,你可以user.save()当然,有$set解决方法,但如果您只想为您的用户完成简单的更新,则更多的是一种矫枉过正。通过这种方法,我什async可以在入职过程中使用库轻松地将一系列更新链接到用户记录上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章