Преобразовать MongoCursor из -> find () в массив - PullRequest
15 голосов
/ 06 октября 2011
$jokes = $collection->find();

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

Ответы [ 7 ]

36 голосов
/ 06 октября 2011

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

$jokes = $collection->find();
$jokesArray = iterator_to_array($jokes);
7 голосов
/ 27 апреля 2015

В качестве примечания к ответу Криса:

массив iterator_to_array (Traversable $ iterator [, bool $ use_keys = true])

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

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

2 голосов
/ 21 августа 2018

iterator_to_array не работает для вложения более двух уровней,

Используя typeMap вы можете конвертировать корень и его документ в массив, он будет работать для любого уровня вложенности

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(); 
2 голосов
/ 13 сентября 2016

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

$jokes = $collection->find();
foreach ($jokes as $joke) {
    var_dump($joke);
}
1 голос
/ 20 марта 2017

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

findeOne()->getArrayCopy();

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

вы также можете установить свои предпочтения с помощью опции typeMap

'typeMap' =>[
      'document' => 'array',
       'root' => 'array'
                ]
0 голосов
/ 12 апреля 2017

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

(mongodb> = 1.0.0)

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

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

или:

$jokes = $collection->find();
$jokesArray = $jokes->toArray();
0 голосов
/ 06 октября 2011

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

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

$cursor = $collection->find();
foreach($cursor as $jokes) {
 print_r($jokes);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...