如何从 Mongoose 中的多个数组更新数组内的值?
How to update value inside an array from multiple array in 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
}
这意味着一个用户可以有多个组织,每个显示名称和用户类型都取决于它。我想做的是,我只想使用请求正文中的 JSON 更新一个组织的 displayname
。
{
"Displayname" : "Khay Usaki",
"Email" : "khayusaki@gmail.com"
}
我的猫鼬查询如下。
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',
}
]
}
但确实save.I不希望有人能帮我找到解决方案。
p.s。我在 User.findOne
中尝试使用 $push
,但它也不起作用。
===解决方法=====
感谢@BatScream 的建议,它开始工作如下。
User.findOneAndUpdate({
username: req.body.Email,
organization: {$elemMatch: {idOrganization: "54c8b01af927db992d021f58"}}
},
{$set: {"organization.$.displayname": req.body.Displayname}}, {},
function(err, response) {
// handle own response
});
尝试
user.organization.add(another_orginaztion);
您可以使用 $ positional operator in the findOneAndUpdate 方法。
Model.findOneAndUpdate({"username": req.body.Email,
"organization.idOrganization":"54c8b01af927db992d021f58"},
{$set:{"organization.$.displayname":req.body.Displayname}},
{},
function(err,resp){//handle response})
我有一个 User
mongodb 结构,如下所示。
{
"_id" : ObjectId("54d2f68edbe2337d000e1568"),
"username" : "khayusaki@gmail.com",
"organization" : [
{
"idOrganization" : "54c8b01af927db992d021f58",
"usertype" : 1,
"displayname" : "K",
},
{
"idOrganization" : "54c8b01af927db992d021f60",
"usertype" : 2,
"displayname" : "Khay",
}
],
"__v" : 0
}
这意味着一个用户可以有多个组织,每个显示名称和用户类型都取决于它。我想做的是,我只想使用请求正文中的 JSON 更新一个组织的 displayname
。
{
"Displayname" : "Khay Usaki",
"Email" : "khayusaki@gmail.com"
}
我的猫鼬查询如下。
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',
}
]
}
但确实save.I不希望有人能帮我找到解决方案。
p.s。我在 User.findOne
中尝试使用 $push
,但它也不起作用。
===解决方法===== 感谢@BatScream 的建议,它开始工作如下。
User.findOneAndUpdate({
username: req.body.Email,
organization: {$elemMatch: {idOrganization: "54c8b01af927db992d021f58"}}
},
{$set: {"organization.$.displayname": req.body.Displayname}}, {},
function(err, response) {
// handle own response
});
尝试
user.organization.add(another_orginaztion);
您可以使用 $ positional operator in the findOneAndUpdate 方法。
Model.findOneAndUpdate({"username": req.body.Email,
"organization.idOrganization":"54c8b01af927db992d021f58"},
{$set:{"organization.$.displayname":req.body.Displayname}},
{},
function(err,resp){//handle response})