Подтвердить что ты не робот

Преобразовать MongoCursor из → find() в массив

$jokes = $collection->find();

Как преобразовать $jokes в массив?

4b9b3361

Ответ 1

Вы можете использовать функцию PHP iterator_to_array, как показано в примере 1 MongoCursor docs:

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

Ответ 2

Как примечание к Крису:

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

Обратите внимание на необязательный второй параметр, если он установлен на true (по умолчанию), последний массив будет индексироваться с использованием поля "_id" из каждого документа.

Если вы применили сортировку в запросе mongo, конечный массив может быть не таким, как вы ожидали, что означает, что порядок сортировки не будет сохранен (если вы не установите параметр $use_keys в ложь)

Ответ 3

iterator_to_array() заставляет драйвер загружать все результаты в память, , поэтому не делайте этого для наборов результатов, которые больше, чем память! используйте это

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

Ответ 4

намного проще:

findeOne()->getArrayCopy();

как упоминалось ранее: остерегайтесь загрузки больших результирующих наборов и преобразования их в массив

вы также можете настроить свои настройки с помощью опции typeMap

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

Ответ 5

find() в основном возвращает курсор MongoDB http://www.php.net/manual/en/mongocollection.find.php

это должно работать для вашего случая

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

Ответ 6

если кто-то пришел сюда, вы также можете использовать метод toArray.

(mongodb >= 1.0.0)

MongoDB\Driver\Cursor:: toArray - возвращает массив, содержащий все результаты для этого курсора

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

или:

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