2012-11-12 109 views
1

我想更新我的集合中的子文档数组中的数组字段。我的收藏是这样的:MongoDB查找数组中的元素(subdocument)

{ 
_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"}); 

它仍然没有给我任何东西。有人可以帮助我吗? 谢谢..

回答

3

这是行不通的。

> 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对数组中的对象和匹配的对象被更新的更新后从falsetrue,那是你在找什么?

+0

是的..它的确如此,但我想获得我想更新的数组元素。当我运行更新时,is_user字段不会更新。 – sharath

+0

是否有您输入的其中一个查询有错字,因为我没有看到更新查询。 – sharath

+0

即使这不适用于我:( db.users.update({_ id:“1”,“employees.eid”:“2”},{$ set:{“employees。$。is_user”:true} },true); – sharath