猫鼬更新数据信息,如何防止覆盖

mongoose update data information, how to prevent overwrite

所以我尝试使用 Mongoose 更新 mongodb 数据库中的数据存储 原始数据结构如下所示

{
    "_id" : ObjectId("234u232kjrkjwebrkw"),
    "local" : {
        "password" : "sdflsdjflsdjlfkjsdlkfjklsdjflksd",
        "email" : "email@email.com"
    },
    "__v" : 0
}

我正在尝试更新 "local" 中的 "userName" 属性。之后它应该是

{
    "_id" : ObjectId("234u232kjrkjwebrkw"),
    "local" : {
        "password" : "sdflsdjflsdjlfkjsdlkfjklsdjflksd",
        "email" : "email@email.com",
        "userName" : "yowhatsup"
    },
    "__v" : 0
}

我用过这个

User.findByIdAndUpdate("54a490ab6e13cca1d47870d6", {local:{ userName: 'jasonBorne' }}, { upsert: true }, function(){})

变成了这个

{
    "_id" : ObjectId("234u232kjrkjwebrkw"),
    "local" : {
        "userName" : "yowhatsup"
    },
    "__v" : 0
}

已被覆盖。 如何避免这种情况?

注意:新的 "userName" 在模型被构造时被定义为 {type:String,default:null}。

如果存在,您可以进行更新,否则插入:

更新的参数是:findQuery、data、queryOptions、onComplete

User.update({"_id" : ObjectId("234u232kjrkjwebrkw")}, { $set: { "local.userName": "whatsup" } }, { upsert: true }, function(err){...});