PHP error_log和echo说不同的东西

时间:2015-03-06 18:19:11

标签: php mongodb

我使用以下代码

对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项。这似乎是一个非常奇怪的问题,我不知道为什么它会发生如此简单的事情

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。问题是mongo的结果集中没有转义[和],当它们被JSON编码时,它将它们解释为数组的结尾。我所做的是关闭导致问题的两列,因为我不需要它们。

可以使用投影作为可选的第二个参数找到()

,在mongo中关闭列
$projection = array('AnalyticsClick'=>0,'AnalyticsView'=>0);
$listings =  connect()->find(array("AgentDetails.Name"=> new MongoRegex("/$name/i")),$projection);