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

问题描述 投票:15回答:7
$jokes = $collection->find();

如何将$jokes转换为数组?

php mongodb
7个回答
36
投票

您可以使用PHP的iterator_to_array函数,如MongoCursor docs的示例1中所示:

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

7
投票

作为克里斯答案的旁注:

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

注意可选的第二个参数,如果设置为true(默认值),则使用每个文档中的“_id”字段索引最终数组。

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


2
投票

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

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

2
投票

iterator_to_array不能用于嵌套超过2个级别,

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

findOne($过滤,$选项)

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

找到($过滤,$选项)

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

1
投票

更容易:

findeOne()->getArrayCopy();

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

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

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

-1
投票

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

这应该适合你的情况

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

-2
投票

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

(mongodb> = 1.0.0)

MongoDB \ Driver \ Cursor :: toArray - 返回包含此游标的所有结果的数组

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

要么 :

$jokes = $collection->find();
$jokesArray = $jokes->toArray();
© www.soinside.com 2019 - 2024. All rights reserved.