将MongoCursor从 - > find()转换为数组

时间:2011-10-06 03:22:56

标签: php mongodb

$jokes = $collection->find();

如何将$jokes转换为数组?

7 个答案:

答案 0 :(得分:36)

您可以使用PHP的iterator_to_array功能,如MongoCursor docs的示例1所示:

$jokes = $collection->find();
$jokesArray = iterator_to_array($jokes);

答案 1 :(得分:7)

作为克里斯回答的旁注:

  

array iterator_to_array(Traversable $ iterator [,bool $ use_keys =   是])

注意可选的第二个参数,如果它设置为true(默认值),最终的数组将使用" _id"每个文件的字段。

如果您在mongo查询中应用了排序,则最终数组可能不是您所期望的,这意味着不会保留排序顺序(除非您将 $ use_keys 参数设置为

答案 2 :(得分:2)

iterator_to_array()强制驱动程序将所有结果加载到内存中,所以不要对大于内存的结果集执行此操作! 使用这个

$jokes = $collection->find();
foreach ($jokes as $joke) {
    var_dump($joke);
}

答案 3 :(得分:2)

iterator_to_array 不适用于嵌套两个以上级别,

使用 typeMap ,您可以将根及其文档转换为数组,它将适用于任何级别的嵌套

findOne($ filter,$ options)

$options = ["typeMap" => ['root' => 'array', 'document' => 'array']];
$collection->findOne(['myId' => $id ], $options); // returns array

查找($ filter,$ options)

$options = ["typeMap" => ['root' => 'array', 'document' => 'array']];
$collection->find(['myId' => $id ], $options)->toArray(); 

答案 4 :(得分:1)

更容易:

findeOne()->getArrayCopy();

如前所述:注意加载大型结果集并将它们转换为数组

您还可以使用typeMap选项设置首选项

'typeMap' =>[
      'document' => 'array',
       'root' => 'array'
                ]

答案 5 :(得分:-1)

find()基本上返回MongoDB游标http://www.php.net/manual/en/mongocollection.find.php

这应该适合您的情况

$cursor = $collection->find();
foreach($cursor as $jokes) {
 print_r($jokes);
}

答案 6 :(得分:-2)

如果有人来到这里,你也可以使用toArray方法。

  

(mongodb> = 1.0.0)

     

MongoDB \ Driver \ Cursor :: toArray - 返回包含all的数组   此光标的结果

$jokes = $collection->find()->toArray();

或:

$jokes = $collection->find();
$jokesArray = $jokes->toArray();