由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();
}
答案 0 :(得分: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());
答案 1 :(得分:2)
key()总是返回一个字符串(参见http://php.net/manual/en/class.iterator.php),因此它会产生通知,试图将数组转换为字符串形式。但这只是一个通知,它应该仍然有用。
解决这个问题的最简单方法可能就是不要在游标上调用toArray():而是反复遍历它(foreach $resultCursor as $value) ...
)。