Comment convertir MongoDB BSONDocument en JSON valide en PHP?
J'utilise MongoDB avec la bibliothèque PHP. J'ai inséré un document JSON valide dans MongoDB en utilisant PHP. Je suis maintenant en train de récupérer le document en utilisant findOne et j'obtiens un MongoDBModelBSONDocument objet comme un résultat. Comment puis-je récupérer facilement mon document JSON? Y a-t-il une fonction intégrée ou vais-je devoir écrire de la logique pour convertir le BSONDocument en JSON?
4 réponses
Je n'ai pas vu de réponses ici et j'avais le même problème. J'ai fait quelques recherches et il apparaît que lorsque vous créez un document de MongoDB\Model\BSONDocument il y a une méthode bsonSerialize (). Cette méthode retournera un objet stdClass qui est vraiment la classe PHP Array. Selon la documentation on peut alors convertir de PHP en BSON et puis en JSON.
C'est bizarre, mais ça fonctionne. Voici mon exemple $ accountResultDoc est de MongoDB\Model\BSONDocument type.
$json = MongoDB\BSON\toJSON(MongoDB\BSON\fromPHP($accountResultDoc))
Résultats
{
"_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
}
une Autre solution serait:
json_encode( $bsonDoc->getArrayCopy() );
L'objet BSONDocument a une méthode jsonSerialize. Utiliser:
Exemple
{"_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;
sortie:
12345
myfile
j'ai eu le même problème et c'est comme ça que j'ai accédé aux valeurs à l'intérieur. Cela fonctionne avec find
.
foreach ($result as $entry) {
echo $entry['_id'], $entry['val1'], ['val2'];
}
Espérons que cela aide quelqu'un.