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 に答える