使用 MongoDB/CakePHP 查找请求,返回 id:null


Find request with MongoDB/CakePHP return id:null

我需要用cakePHP和MongoDB数据库运行一个简单的请求。我使用 ichikaway/cakephp-mongodb 插件。插入是可以的,但这个简单的要求:

$this->Category->find('first', array('conditions' => array('name_cat' =>  "Cars")));

给我:

array('Category' => array('id' => null))        

但是"汽车"在我的数据库中:

{
    "_id" : ObjectId("54ad46e919d056cc7b483430"),
    "facebook_id" : "1",
    "name_cat" : "Cars"
} 

我已经测试过添加"提示"参数或在模型中定义$primaryKey但结果是一样的。

感谢您的帮助。

编辑:

经过一些研究,我发现每个请求"查找"的最后一个项目都被一个带有 id:null 的项目所取代。如果我的数据库中有 2 个项目"汽车":

$this->Category->find('All', array("conditions" => array("name_cat" => "Cars")));

给我:

array(
(int) 0 => array(
    'Category' => array(
        'facebook_id' => '1',
        'name_cat' => 'Cars',
        'id' => '54ad46e919d056cc7b483430'
    )
),
(int) 1 => array(
    'Category' => array(
        'id' => null
    )
)

我查看了插件源代码,发现MongoCursor::getNext()函数为最后一项提供了NULL。此函数在请求执行后在 read() 函数中调用。

所以我使用了iterator_to_array()函数,结果很好。

MogodbSource中的旧代码.php(第1168至1180行)

while ($return->hasNext()) {
    $mongodata = $return->getNext();
    [...]
}

新代码 :

$cursor_mongo = iterator_to_array($return);
foreach ($cursor_mongo as $mongodata) {
    [...]
}

这个新代码对我有用。