小组和成员的架构如下:
var group=new Schema({
group_id:Number,
group_name:String,
members:[member]
});
var member=new Schema({
member_id:number,
name:String,
});
在组集合中插入一些记录后的示例文档
[{
_id:55ff7fca8d3f6607114dc57d
group_id:1001,
group_name:"tango mike",
members:[
{
_id:44ff7fca8d3f6607114dc21c
member_id:2001,
member_name:"Bob martin" ,
address:String,
sex:String
},
{
_id:22ff7fca8d3f6607114dc22d
member_id:2002,
member_name:"Marry",
address:String,
sex:String
},
{
_id:44ff7fca8d3f6607114dc23e
member_id:2003,
member_name:"Alice" ,
address:String,
sex:String
}
]
}]
我的问题:
我正在尝试更新单个组成员的记录(子文档成员的元素)。在更新时,我有以下数据组:_id
,group_id
,成员:_id
和newdata
。我这样想;但它无法正常工作
var newData={
member_name:"Alice goda" ,
address:"xyz",
sex:"F"
}
groupModel.findOne({"_id":"55fdbaa7457aa1b9bd7f7cf7","group_id":1001},'members -_id',function(err,groupMembers){
if(err)
{
res.json({
"isError":true,
"error":{
"status":1042,
"message":err
}
});
}
else
{
var mem=groupMembers.id("44ff7fca8d3f6607114dc23e");
mem.member_name=newData.member_name;
mem.address=newData.address;
mem.sex=newData.sex;
mem.save(function(err,data){
if(!err)
//sucessfull updated
});
res.json(groupDetails);
}
});
答案 0 :(得分:0)
根据您的问题详细信息,我们希望根据您指定的条件更新members
数组中的一个对象。
因此,为了准确运行用例的更新查询,您可以针对您的集合运行以下更新操作:
db.collection.update({ _id: "55ff7fca8d3f6607114dc57d",
group_id:1001,
members: {
$elemMatch: { _id: "44ff7fca8d3f6607114dc23e" }
}
},
{ $set: {
"members.$.member_name": "Alice goda",
"members.$.address": "xyz",
"members.$.sex": "F"
}});
但请注意,$
位置运算符仅更新与查询匹配的第一个数组项。
不幸的是,在单个操作中不可能更新符合条件的所有数组元素。正如您在MongoDB Jira上看到的,上述功能是最受欢迎的功能之一,但尚未在MongoDB中直接实现。