PHP:iterator_to_array()可以在MongoCursor上抛出异常

时间:2011-03-18 18:45:22

标签: php exception mongodb iterator cursor

iterator_to_array()实例上使用MongoCursor可以在PHP 5.3中抛出异常吗?换句话说,我是否需要在try-catch语句中对iterator_to_array()个实例进行MongoCursor调用?

如,

$mongo = new Mongo();
$mongo_db = $mongo['my_database'];
$mongo_coll = $mongo_db['my_collection'];

// This

$cursor = $mongo_coll->find();
$documents = iterator_to_array($cursor);

// Versus this.

$cursor = $mongo_coll->find();
try {
    $documents = iterator_to_array($cursor);
} catch (Exception $e) {
    //...
}

3 个答案:

答案 0 :(得分:1)

iterator_to_array()可以抛出异常,因为它会调用next()

答案 1 :(得分:0)

我认为此页面上http://www.php.net/manual/en/mongo.queries.php的第一条评论会引起您的兴趣,但不知道当您查看它时它是否会是第一条,所以这是交易。

您可以使用$cursor->valid()检查光标是否有效。 并且评论说你可能必须在收到光标后回放光标,因为它有时候在收到时没有倒回。

...
$cursor = $mongo_coll->find();
$cursor->rewind();
if ($cursor->valid()) {
    $documents = iterator_to_array($cursor);
}

上面的try catch块的优点是try catch块可能抛出异常,而你可以在光标实际有效时使用光标。

答案 2 :(得分:0)

Find方法返回Traversable对象或抛出异常。

Iterator_to_array正在接受Traversable对象。

只有在迭代期间Mongo驱动程序或Mongo中发生了非常糟糕的事情时才会出现异常。也许是断线。