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

时间:2015-01-29 12:11:34

标签: node.js mongodb mongoose

所以我试图使用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}。

1 个答案:

答案 0 :(得分:1)

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

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

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