gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:49:29 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com