1

由于 MapReduce,我有一个具有以下结构的 MongoDb 集合:

{ "_id" : { "id" : NumberLong(1), "date" : "04-26-2012" }, "value" : { "count" : 100 } }

在我的控制器中,我正在执行以下操作以返回一个数组以显示结果:

$mongoDb         = $mongo->selectDatabase($dbname);        
$mongoCollection = $mongoDb->selectCollection($collname);
$qb              = $mongoCollection->createQueryBuilder(); 
$qb              = $qb->find();        
$resultCursor    = $qb->getQuery()->execute();
                                  ->limit(10);
$resultArray     = $resultCursor  ->toArray();

但是,我得到一个例外:“注意:在 vendor/doctrine-mongodb/lib/Doctrine/MongoDB/Cursor.php 第 154 行中的数组到字符串转换”

下面是 Cursor.php 的第 154 行。MongoCursor::key 不将“_id”作为数组处理吗?

/** @proxy */
public function key()
{
    return $this->mongoCursor->key();
}
4

2 回答 2

9

为了快速将 mongoDb 光标转换为数组,您可以使用http://php.net/manual/en/function.iterator-to-array.php

$qb = $this->createQueryBuilder();

$qb->hydrate(false);

$query = $qb->getQuery();

$resultArray = iterator_to_array($query->execute());
于 2012-10-18T17:53:04.197 回答
2

key() 总是返回一个字符串(参见http://php.net/manual/en/class.iterator.php),因此它会生成该通知,试图将数组转换为字符串形式。不过,这只是一个通知,它应该仍然有效。

解决这个问题的最简单方法可能就是不要在游标上调用 toArray():而是迭代它 ( foreach $resultCursor as $value) ...)。

于 2012-04-26T17:56:56.977 回答