我正在使用MongoDB 2.6.1和最新的MongoDB PHP驱动程序来执行聚合查询。当我循环使用foreach返回的CommandCursor时它工作正常,但是如果聚合没有返回任何结果,那么foreach循环会抛出一个Cursor Exception。
除了尝试/捕获MongoCursor异常之外,还有更好的方法吗?
我的收藏集有一个日期时间字段,存储为"正确的时间戳"所以它很容易被查询。我知道2014-05-25之前我没有数据,但之后每天都有数据。在最简单的聚合中,我可以通过错误来失败,我只有一个匹配阶段:
我通过以下方式调用光标:
$connection = MongoClient(<connection string>);
$collection = $connection->test->testColl;
$dateFrom = new MongoDate(strtotime("2014-05-15"));
$dateTo = new MongoDate(strtotime("2014-05-24"));
$query = array(array('$match' =>
array(
'timestamp' => array('$gt' => $dateFrom, '$lt' => $dateTo)
)
)
);
$results = $collection->aggregateCursor($query);
foreach ($results as $item)
{
// do stuff with row, e.g.
var_dump($item);
}
如果我将$ dateFrom和$ dateTo更改为有效数据的日期,我可以愉快地迭代数据而没有任何异常。当我没有数据返回时,PHP返回以下错误:
Exception: mongodbserver.local:27017 : assertion src/mongo/s/cursors.cpp:262
File: </path/to/php/file>
Line: <line number of the foreach loop>
Exception Stack Trace
#0 </path/to/php/file>(<line number of the foreach loop>): MongoCommandCursor->rewind()
#1 {main}