MongoDB 在数组(子文档)中查找元素

sha*_*ath 2 mongodb mongodb-query

我正在尝试更新集合中子文档数组中的数组字段。我的收藏是这样的:

{
 _id:"1",
 employees:[{ eid:"2",
              ename:"test",
              is_user:true
             },
             { eid:"3",
              ename:"test2",
              is_user:true
             }
           ]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试更新 is_user 状态并尝试以下方式:

db.users.update({_id:"1","employees.eid":"2"},{$set:"employees.$.is_user":true},true);
Run Code Online (Sandbox Code Playgroud)

我也试过:

db.users.update({_id:"1","employees.$.eid":"2"},{$set:"employees.$.is_user":true},true);
Run Code Online (Sandbox Code Playgroud)

但是当我运行查找时,对于查询:

db.users.find({_id:"1","employees.eid":"2"});
Run Code Online (Sandbox Code Playgroud)

它仍然给我什么。有人可以帮我吗?谢谢..

Pab*_*ook 5

那确实有效。

> 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 } ] }
Run Code Online (Sandbox Code Playgroud)

对于$您想要使用它的操作员,例如:

> 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 } ] }
Run Code Online (Sandbox Code Playgroud)

请注意在数组中的两个对象上如何将 insert ofis_user设置为 tofalse以及更新后匹配的对象从falseto更新true,这是您要查找的内容吗?