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

所以我试图在MongoDB数据库中更新数据存储,使用Mongoose原始数据结构看起来像这样

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

我试图更新“本地”的“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){...});