如何更新从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我用$push
在User.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);