Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB查找数组(子文档)中的元素_Mongodb_Mongodb Query - Fatal编程技术网

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

MongoDB查找数组(子文档)中的元素,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试更新集合中子文档数组中的数组字段。我的收藏如下: { _id:"1", employees:[{ eid:"2", ename:"test", is_user:true }, { eid:"3", ename:"test2", is_user:true } ] } 我正在

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

{
 _id:"1",
 employees:[{ eid:"2",
              ename:"test",
              is_user:true
             },
             { eid:"3",
              ename:"test2",
              is_user:true
             }
           ]
}
我正在尝试更新is_用户状态,并尝试以下方法:

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"});
它仍然没有给我任何东西。有人能帮我吗? 谢谢你。

这确实有效

> 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\u user
的insert是如何设置为
false
,并且在更新之后,匹配对象从
false
更新为
true
,这就是您要查找的吗?

是。。是的,但我只想得到我想更新的数组元素。当我运行更新时,is_user字段没有更新。你键入的查询中是否有一个输入错误,因为我没有看到更新查询。即使这样对我也不起作用:(db.users.update({u id:“1”,“employees.eid”:“2”},{$set:{“employees.$.is_user”:true},true);抱歉,错过了更新查询,你是对的,只是复制了它。与我的更新所做的差不多。但是现在它工作了。非常感谢兄弟。我尝试了“查询”部分的位置运算符,但我猜这不是rt。再次非常感谢:)像你这样的人,让我们开始:)谢谢你的超快速回复