Я использую MongoDB с библиотекой PHP. Я вставил действительный документ JSON в MongoDB, используя PHP. Я сейчас получаю документ, используя findOne и в результате я получаю объект MongoDB \ Model \ BSONDocument. Как мне легко вернуть мой документ JSON? Есть ли встроенная функция или мне придется написать логику для преобразования BSONDocument в JSON?
Я не видел здесь никаких ответов, и у меня возникла та же проблема. Я провел некоторые исследования, и кажется, что при создании документа MongoDB \ Model \ BSONDocument существует метод bsonSerialize (). Этот метод вернет объект stdClass, который на самом деле является классом PHP Array. Согласно документации, можно преобразовать PHP в BSON, а затем в JSON.
Это выглядит безумно, но это работает. Вот мой пример, $ accountResultDoc имеет тип MongoDB \ Model \ BSONDocument.
$json = MongoDB\BSON\toJSON(MongoDB\BSON\fromPHP($accountResultDoc))
Результаты
{
"_id": {
"$oid": "56e1d8c31d41c849fb292184"},
"accountName": "Michael's Test Company",
"accountType": "Partner",
"subsidiary_id": {
"$oid": "563c3ffbaca6f518d80303ce"},
"salesforceId": "WERWERWEr2",
"netsuiteExternalId": "56e1d8c31d41c849fb292184",
"suspendBilling": false,
"testAccount": false,
"serviceOrder_ids": null,
"invoice_ids": null
}
Другой способ будет:
json_encode( $bsonDoc->getArrayCopy() );
Объект BSONDocument имеет метод jsonSerialize. Используйте это:
пример
{"_id" : 12345,
"filename" : "myfile",
"header" : {
"version" : 2,
"registry" : "test",
"serial" : 20080215,
"records" : 17806,
"startDate" : 19850701,
"endDate" : 20080214
},
}
$connect = new MongoDB\Client('mongodb://yourconnection');
$db = $connect->YourDB;
$collection = $db->YourCollection;
$test = $collection->findOne(array("_id"=>12345));
$data = $test->jsonSerialize();
echo $data->_id;
echo $data->filename;
Будет выводить это:
12345
myfile
У меня была такая же проблема, и вот как я получил доступ к значениям внутри. Это работает с find
,
foreach ($result as $entry) {
echo $entry['_id'], $entry['val1'], ['val2'];
}
Надеюсь, это кому-нибудь поможет.