我使用以下代码
对mongo集合进行了一个非常简单的循环function get_listing_by_name($name){
$listings = connect()->find(array("AgentDetails.Name"=> new MongoRegex("/$name/i")));
$return = array();
$i=0;
while( $listings->hasNext() )
{
error_log('Looping');
$return[$i] = $listings->getNext();
$return[$i++]['_id'] = $listings->key();
}
error_log(json_encode($return));
return json_encode($return);
}
我尝试了多种循环遍历此数据的方法。这一切都给出了相同的结果。问题是只返回集合中的第一个项目。循环运行3次,最后error_log吐出所有3个项目,但在返回调用中,只返回第一个项目。以下是相同的
function get_listing_by_name($name){
$listings = connect()->find(array("AgentDetails.Name"=> new MongoRegex("/$name/i")));
$return = array();
$i=0;
while( $listings->hasNext() )
{
error_log('Looping');
$return[$i] = $listings->getNext();
$return[$i++]['_id'] = $listings->key();
}
error_log(json_encode($return));
echo json_encode($return);
}
echo only echo是第一项,而循环运行3次,error_log吐出所有3项。这似乎是一个非常奇怪的问题,我不知道为什么它会发生如此简单的事情
答案 0 :(得分:0)
我弄明白了这个问题。问题是mongo的结果集中没有转义[和],当它们被JSON编码时,它将它们解释为数组的结尾。我所做的是关闭导致问题的两列,因为我不需要它们。
可以使用投影作为可选的第二个参数找到()
,在mongo中关闭列$projection = array('AnalyticsClick'=>0,'AnalyticsView'=>0);
$listings = connect()->find(array("AgentDetails.Name"=> new MongoRegex("/$name/i")),$projection);