【发布时间】:2020-05-23 20:43:56
【问题描述】:
我在使用新的 mongodb php 驱动程序时遇到问题。 虽然 iterator_to_array 适用于 ->find,但如果我只返回一个文档,它具有 MongoDB\Model\BSONDocument 格式。
$result = $db->clients->findOne(array('_id' => $id));
$result = (array) $result;
在 Mongo 中,文档看起来像:
{
"_id" : ObjectId("3894713i4b13iu412"),
"active" : true,
"logo" : "this is logo",
"settings" : {
"email" : "days",
"testMode" : false
},
"stats" : {
"f" : {
"all" : [
{
"count" : NumberLong(15846),
"sum" : NumberLong(149479)
},
{
"count" : NumberLong(15846),
"sum" : NumberLong(148891)
},
{
"count" : NumberLong(15846),
"sum" : {
"1" : NumberLong(15522),
"2" : NumberLong(324)
}
}
]
},
"l" : {
"order" : ISODate("2016-12-05T09:10:53.855+0000"),
"feedback" : ISODate("2016-12-05T08:34:48.403+0000")
}
},
"title" : "hhh.ro",
"url" : "sdfasdf"
}
这只会将第一级元素转换为数组,但嵌套的文档元素仍保留为 MongoDB\Model\BSONDocument;
iterator_to_array 不起作用,因为这不是可迭代的。
如何将整个文档转换为关联数组,如旧的 mongo 驱动程序或 stdClass?
【问题讨论】:
-
也许你可以试试这个 json_decode(json_encode($result), true);
-
它使 _id 像这样 ["$oid"]=> string(24) "5784d428f079959a088b4595"
-
你试过这个 $db->clients->findOne(array('_id' => $id))->toArray()
-
用于查找。 findOne 不返回迭代器。是的,我尝试了 toArray。