Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Php 如何从特定MongoDB文档中的对象数组中获取特定对象?_Php_Mongodb - Fatal编程技术网

Php 如何从特定MongoDB文档中的对象数组中获取特定对象?

Php 如何从特定MongoDB文档中的对象数组中获取特定对象?,php,mongodb,Php,Mongodb,我的MongoDB文档有一个结构: { _身份证号码:“12345”, 姓名:"富",, 对象:{ _对象的数组_:[{ 身份证号码:507, 名字:“某个名字”, dt:“2012-06-27 16:35:50” },{ 身份证号码:506 名字:“其他名字”, dt:“2012-06-2116:09:05” }, … ] } } 我需要从对象的数组中获取一个对象,该对象具有文档的特定id,并具有指定的名称。我使用php并尝试执行下一个代码: $collection->find(数组('na

我的MongoDB文档有一个结构:

{
_身份证号码:“12345”,
姓名:"富",,
对象:{
_对象的数组_:[{
身份证号码:507,
名字:“某个名字”,
dt:“2012-06-27 16:35:50”
},{
身份证号码:506
名字:“其他名字”,
dt:“2012-06-2116:09:05”
},
…
]
}
}
我需要从对象的数组中获取一个对象,该对象具有文档的特定id,并具有指定的名称。我使用php并尝试执行下一个代码:

$collection->find(数组('name'=>'foo','object.array_of_objects.id'=>507));
它返回\u对象的数组\u的所有元素,而不是id为507的元素。 之后,我尝试使用$elemMatch进行查询:

$collection->find(数组('name'=>'foo','object.array\u of_objects'=>array('elemMatch'=>array('id'=>507)));
但它的回报是一样的(
我的MongoDB版本2.0.6。请提供帮助。

您不能使用MongoDB执行此操作:MongoDB不会深入到特定文档以从数组中提取项目。例如,您必须自己执行此操作


现在PHP驱动程序可能会做更多的工作,我不知道——我说的是MongoDB核心查询。

这个问题已经解决,将在下一个稳定版本MongoDB 2.2中提供:

我刚刚使用MongoDB 2.1.2(不稳定,开发版本)进行了尝试:

样本文件:

{ "_id" : 1, "object" : { "array" : [ { "id" : 507, "name" : "Jenna" }, { "id" : 506, "name" : "Matt" } ] } } 
查询:

db.food.find({_id:1, "object.array.id":506},{_id:0, "object.array.$":1})
结果:

{ "object" : { "array" : [ { "id" : 506, "name" : "Matt" } ] } }

所以,我用MapReduce做了。希望这能节省一些时间和精力

$name='foo';
$id=507;
$mongo=新mongo(“…”);
$db=$mongo->my_db;
$map=newmongocode('function(){'。
'this.object.array_of_objects.forEach(function(obj){'。
'如果(对象id='.$id.')'。
“发射(1,obj);”。
'});}'
);
$reduce=newmongocode('function(k,v){return[k,v];}');
$response=$db->command(数组(
“mapreduce”=>“我的收藏”,
'map'=>$map,
“reduce”=>reduce美元,
'query'=>array('name'=>$name),
'out'=>array('inline'=>1)
));
var_dump($response['result']);

MongoDB的缺点:@david cheung谢谢!因此,我将尝试使用Mapreduce来实现这一点。您可以返回字段的子集-查看MongoDB文档:@Jenna是的,您是对的——但是基于其值的数组中的特定项?据我所知,可以通过获取整个对象数组和搜索desir来实现使用PHP或MapReduce编辑项目,对吗?各位好消息!谢谢,@Jenna!