我正在尝试更新我的集合中的子文档数组中的数组字段。我的收藏如下:
{
_id:"1",
employees:[{ eid:"2",
ename:"test",
is_user:true
},
{ eid:"3",
ename:"test2",
is_user:true
}
]
}
我正在尝试更新is_user状态,并尝试以下方式:
db.users.update({_id:"1","employees.eid":"2"},{$set:"employees.$.is_user":true},true);
我也尝试过:
db.users.update({_id:"1","employees.$.eid":"2"},{$set:"employees.$.is_user":true},true);
但是当我运行查找时,查询:
db.users.find({_id:"1","employees.eid":"2"});
它仍然没有给我什么。有人可以帮我这个吗?
谢谢..
答案 0 :(得分:4)
这确实有用。
> db.test.insert({_id:"1", employees:[{ eid:"2", ename:"test", is_user:true }, { eid:"3", ename:"test2", is_user:true } ] })
> db.test.find({_id:"1","employees.eid":"2"});
{ "_id" : "1", "employees" : [ { "eid" : "2", "ename" : "test", "is_user" : true }, { "eid" : "3", "ename" : "test2", "is_user" : true } ] }
对于$
运算符,您希望使用它:
> db.test.insert({_id:"1", employees:[{ eid:"2", ename:"test", is_user:false }, { eid:"3", ename:"test2", is_user:false } ] })
> db.test.find({_id:"1", "employees.eid":"2", "employees.is_user": true});
> db.test.update({_id:"1", "employees.eid":"2"}, {$set: {"employees.$.is_user": true}});
> db.test.find({_id:"1", "employees.eid":"2", "employees.is_user": true});
{ "_id" : "1", "employees" : [ { "eid" : "2", "ename" : "test", "is_user" : true }, { "eid" : "3", "ename" : "test2", "is_user" : false } ] }
注意is_user
的插入如何在数组中的两个对象上设置为false
,并且在更新后匹配对象从false
更新为true
,那你在找什么?