$jokes = $collection->find();
如何将$jokes转换为数组?
$jokes
b1uwtaje1#
您可以使用PHP的iterator_to_array函数,如MongoCursor docs的示例1所示:
iterator_to_array
MongoCursor
$jokes = $collection->find(); $jokesArray = iterator_to_array($jokes);
kdfy810k2#
iterator_to_array不适用于嵌套超过2层,
使用typeMap可以将根目录及其文档转换为数组,适用于任何嵌套级别
findOne($filter,$options)
$options = ["typeMap" => ['root' => 'array', 'document' => 'array']]; $collection->findOne(['myId' => $id ], $options); // returns array
find($filter,$options)
$options = ["typeMap" => ['root' => 'array', 'document' => 'array']]; $collection->find(['myId' => $id ], $options)->toArray();
q35jwt9p3#
作为Chris回答的一个旁注:array iterator_to_array(Traversable $iterator [,bool $use_keys = true ])注意可选的第二个参数,如果它设置为true(默认值),最终的数组将使用每个文档的“_id”字段进行索引。如果在Mongo查询中应用了排序,那么最终的数组可能不是您所期望的,这意味着排序顺序将不会被保留(除非您将**$use_keys参数设置为false**)
ohfgkhjo4#
iterator_to_array()强制驱动程序将所有结果加载到内存中,**所以不要对大于内存的结果集执行此操作!**使用这个
iterator_to_array()
$jokes = $collection->find(); foreach ($jokes as $joke) { var_dump($joke); }
lb3vh1jj5#
更容易:
findeOne()->getArrayCopy();
如前所述:注意不要加载大型结果集并将其转换为数组也可以使用typeMap选项设置首选项
'typeMap' =>[ 'document' => 'array', 'root' => 'array' ]
9bfwbjaz6#
我对多维结果有异议。要将多维结果转换为数组,您可以使用下面的函数。
public function convertMongoResultToArray($result) { if (is_object($result)) { if ($result instanceof \MongoDB\Model\BSONDocument) { $result = $result->getArrayCopy(); } elseif ($result instanceof \MongoDB\Model\BSONArray) { $result = iterator_to_array($result); } elseif ($result instanceof \MongoDB\BSON\ObjectId) { $result = (string) $result; } if (is_array($result)) { foreach ($result as $key => $value) { $result[$key] = $this->convertMongoResultToArray($value); } } } return $result; }
对于上面的函数,你可以传递mongo查询的结果。在函数中,我们将转换可能的三种不同类型的对象到数组中。1.\MongoDB\Model\BSONDocument1.\MongoDB\Model\BSONArray1.\MongoDB\BSON\ObjectId我们将循环遍历结果的每个键,如果键组成数组,则递归调用函数。最终结果将提供php数组。
iq0todco7#
find()返回MongoDB游标http://www.php.net/manual/en/mongocollection.find.php这应该对你的案子有用
$cursor = $collection->find(); foreach($cursor as $jokes) { print_r($jokes); }
gfttwv5a8#
如果有人来到这里,你也可以使用toArray方法。(mongodb >=1.0.0)MongoDB\Driver\Cursor::toArray -返回一个数组,其中包含此游标的所有结果
toArray
$jokes = $collection->find()->toArray();
或:
$jokes = $collection->find(); $jokesArray = $jokes->toArray();
8条答案
按热度按时间b1uwtaje1#
您可以使用PHP的
iterator_to_array
函数,如MongoCursor
docs的示例1所示:kdfy810k2#
iterator_to_array不适用于嵌套超过2层,
使用typeMap可以将根目录及其文档转换为数组,适用于任何嵌套级别
findOne($filter,$options)
find($filter,$options)
q35jwt9p3#
作为Chris回答的一个旁注:
array iterator_to_array(Traversable $iterator [,bool $use_keys = true ])
注意可选的第二个参数,如果它设置为true(默认值),最终的数组将使用每个文档的“_id”字段进行索引。
如果在Mongo查询中应用了排序,那么最终的数组可能不是您所期望的,这意味着排序顺序将不会被保留(除非您将**$use_keys参数设置为false**)
ohfgkhjo4#
iterator_to_array()
强制驱动程序将所有结果加载到内存中,**所以不要对大于内存的结果集执行此操作!**使用这个lb3vh1jj5#
更容易:
如前所述:注意不要加载大型结果集并将其转换为数组
也可以使用typeMap选项设置首选项
9bfwbjaz6#
我对多维结果有异议。要将多维结果转换为数组,您可以使用下面的函数。
对于上面的函数,你可以传递mongo查询的结果。
在函数中,我们将转换可能的三种不同类型的对象到数组中。
1.\MongoDB\Model\BSONDocument
1.\MongoDB\Model\BSONArray
1.\MongoDB\BSON\ObjectId
我们将循环遍历结果的每个键,如果键组成数组,则递归调用函数。
最终结果将提供php数组。
iq0todco7#
find()返回MongoDB游标http://www.php.net/manual/en/mongocollection.find.php
这应该对你的案子有用
gfttwv5a8#
如果有人来到这里,你也可以使用
toArray
方法。(mongodb >=1.0.0)
MongoDB\Driver\Cursor::toArray -返回一个数组,其中包含此游标的所有结果
或: