迭代mongodb查询返回的数组

时间:2013-03-21 09:20:37

标签: php mongodb iteration

我有以下格式的mongodb集合:

{
        "_id" : ObjectId("5141916511e5b498fd2031c4"),
        "itemid" : 1,
        "recommendations" : [
                {
                        "itemid" : 216,
                        "rating" : 0.875297364790784
                },
                {
                        "itemid" : 246,
                        "rating" : 0.8793363655122852
                }
        ]
}
{
        "_id" : ObjectId("5141916511e5b498fd2031c5"),
        "itemid" : 2,
        "recommendations" : [
                {
                        "itemid" : 60,
                        "rating" : 0.9405825249353504
                },
                {
                        "itemid" : 76,
                        "rating" : 0.8822827294664317
                }
        ]
}

我想检索给定itemid的推荐,然后迭代它以打印所有推荐的itemid和ratings.I我正在使用php。

当我尝试迭代返回的游标时,它会抛出“致命错误:在非对象上调用成员函数hasNext()”错误。 看来查询返回的结果集不是游标类型。

以下是我正在使用的代码:

<?php
$mongodb = new Mongo("10.128.170.49:27017");
$database = $mongodb->ProductData;
$collection = $database->Recommendation1;

$cursor1 = $collection->findOne(array("itemid" => 1),array('recommendations'));

var_dump($cursor1);

echo "<hr/><p>iterating over a cursor</p>";
while ($cursor1->hasNext()): $document = $cursor1->getNext(); 
                        $itemid= $document['itemid'];
                        $probable_rating= $document['rating'];                      
                         echo ($itemid)."<br/>";
                         echo ($probable_rating)."<br/>";
                         echo "<hr/>";
endwhile;
?>

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:4)

您必须将findOne()更改为find()

  • findOne()返回第一个找到的结果
  • find()返回一个光标