如何更新从Mongoose中的多个数组的数组内的值?

我有一个像下面的User mongodb结构。

 { "_id" : ObjectId("54d2f68edbe2337d000e1568"), "username" : "khayusaki@gmail.com", "organization" : [ { "idOrganization" : "54c8b01af927db992d021f58", "usertype" : 1, "displayname" : "K", }, { "idOrganization" : "54c8b01af927db992d021f60", "usertype" : 2, "displayname" : "Khay", } ], "__v" : 0 } 

这意味着像用户可以有许多组织,并且每个显示名称和usertype都依赖于它。 我想要做的是,我只想从请求主体使用JSON来更新一个组织的显示名称。

 { "Displayname" : "Khay Usaki", "Email" : "khayusaki@gmail.com" } 

我的mongoose查询如下所示。

 User.findOne({username: req.body.Email}, {organization: {$elemMatch: {idOrganization: '54c8b01af927db992d021f58'}}}, function(err, user) { if (err) res.send(err); user.organization[0].displayname = req.body.Displayname; user.save(); res.json({'message' : 'User successfully updated'}); } }); 

如果我在save()函数之前添加console.log(user) ,它会给我我想要的。

 { _id: 54d2f68edbe2337d000e1568, organization: [ { idOrganization: '54c8b01af927db992d021f58', usertype: 1, displayname: 'Khay Usaki', } ] } 

但是真的没有保存。我希望有人能够帮我find解决办法。

PS我用$pushUser.findOne ,它也不工作。

===解决scheme=====感谢@BatScream的build议,它得到如下工作。

 User.findOneAndUpdate({ username: req.body.Email, organization: {$elemMatch: {idOrganization: "54c8b01af927db992d021f58"}} }, {$set: {"organization.$.displayname": req.body.Displayname}}, {}, function(err, response) { // handle own response }); 

您可以在findOneAndUpdate方法中使用$位置运算符。

  Model.findOneAndUpdate({"username": req.body.Email, "organization.idOrganization":"54c8b01af927db992d021f58"}, {$set:{"organization.$.displayname":req.body.Displayname}}, {}, function(err,resp){//handle response}) 

尝试

 user.organization.add(another_orginaztion);