2016-02-18 15 views
9

Ich verwende MongoDB mit der PHP-Bibliothek. Ich habe ein gültiges JSON-Dokument in MongoDB mit PHP eingefügt. Ich erhalte jetzt das Dokument unter Verwendung findOne und erhalte als Ergebnis ein MongoDB \ Model \ BSONDocument-Objekt. Wie bekomme ich mein JSON-Dokument einfach zurück? Gibt es eine eingebaute Funktion oder muss ich Logik schreiben, um das BSONDocument in JSON zu konvertieren?Wie konvertiert man MongoDB BSONDocument zu gültigem JSON in PHP?

+1

Es scheint mit diesem Fahrerwechsel eine allgemeine Verwirrung. Sie scheinen die [mongodb pecl extension] (http://mongodb.github.io/mongo-php-driver/) direkt zu verwenden, wenn Sie die [höhere Abstraktionsbibliothek hier] verwenden möchten (https: // github.com/mongodb/mongo-php-library). Diese Bibliothek wird nur einfache Objekte liefern, die einfach zu JSON serialisiert werden. Der Treiber der unteren Ebene, den Sie verwenden, soll also von anderen Bibliotheken verwendet werden, die Abstraktion bereitstellen. Die "userland" -Bibliothek sollte immer etwas sein, das von dieser Quelle abstrahiert. –

+0

findOne ist eine Funktion aus dieser Abstraktionsbibliothek auf höherer Ebene, oder? Wenn nicht, lassen Sie mich bitte wissen, welche Funktion ich verwenden sollte, um Dokumente nach ihrer ObjectId abzufragen. Übrigens verwende ich [insertOne] (http://mongodb.github.io/mongo-php-library/api/class-MongoDB.Collection.html#_insertOne), um das Dokument einzufügen. Nicht sicher, ob die Verwendung zum Einfügen auch richtig ist. – sawrubh

+0

Es ist eine Methode in allen höheren und niedrigeren Bibliotheken. Was hast du eigentlich installiert? Sie haben gerade Links als Referenz erhalten. Bitte benutze sie. –

Antwort

10

Ich habe hier keine Antworten gesehen und ich hatte das gleiche Problem. Ich habe etwas recherchiert und es scheint, dass wenn Sie ein Dokument von MongoDB \ Model \ BSONDocument erstellen, es eine bsonSerialize() Methode gibt. Diese Methode gibt ein stdClass-Objekt zurück, das wirklich die PHP-Array-Klasse ist. Entsprechend der Dokumentation kann man dann von PHP zu BSON und dann zu JSON konvertieren.

Das ist verrückt, aber es funktioniert. Hier ist mein Beispiel $ accountResultDoc ist MongoDB \ Model \ BSONDocument type.

$json = MongoDB\BSON\toJSON(MongoDB\BSON\fromPHP($accountResultDoc)) 

Ergebnisse

{ 
    "_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 
} 
+0

http://php.net/manual/en/function.mongodb.bson-tojson.php –

1

Eine andere Möglichkeit wäre:

json_encode($bsonDoc->getArrayCopy());

0

Ich hatte das gleiche Problem, und das ist, wie ich die Werte innerhalb abgerufen. Dies funktioniert mit find.

foreach ($result as $entry) { 
    echo $entry['_id'], $entry['val1'], ['val2']; 
} 

Hoffe, das hilft jemandem.

2

Das BSONDocument-Objekt verfügt über eine jsonSerialize-Methode. Verwenden Sie das:

Beispiel

{"_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; 

Will Ausgang dieses:

12345 
myfile