2016-02-18 11 views
9

私はPHPライブラリでMongoDBを使用しています。 PHPを使用してMongoDB内に有効なJSONドキュメントを挿入しました。 findOneを使用してドキュメントを取得しています。その結果、MongoDB \ Model \ BSONDocumentオブジェクトが取得されています。 JSON文書を簡単に元に戻すにはどうすればよいですか? inbuilt関数がありますか、BSONDocumentをJSONに変換するロジックを記述する必要がありますか?MongoDB BSONDocumentをPHPの有効なJSONに変換するには?

+1

このドライバの変更と、一般的な混乱があるようです。 [mongodb pecl extension](http://mongodb.github.io/mongo-php-driver/)を直接使用しているように見えますが、ここでは[上位レベルの抽象ライブラリ](https:// github.com/mongodb/mongo-php-library)。そのライブラリは単にJSONにシリアライズする単純なオブジェクトを生成します。したがって、使用している下位レベルのドライバは、抽象化を提供する他のライブラリによって使用されることを意図しています。 "userland"ライブラリは、常にそのソースから抽象化されたものでなければなりません。 –

+0

findOneは、その上位レベルの抽象ライブラリの関数ですか?そうでない場合は、ObjectIdを使用してドキュメントをクエリするためにどの関数を使用すべきかを教えてください。私は[insertOne](http://mongodb.github.io/mongo-php-library/api/class-MongoDB.Collection.html#_insertOne)を使って文書を挿入しています。それを使用して挿入するのも正しいかどうかはわかりません。 – sawrubh

+0

これはすべての上位ライブラリと下位ライブラリのメソッドです。あなたは実際にどちらをインストールしましたか?ちょうど参照用のリンクがあります。それらを使用してください。 –

答えて

10

私はここで何の答えも見当たりませんでした。私は同じ問題を抱えていました。私はいくつかの研究を行い、MongoDB \ Model \ BSONDocumentのドキュメントを作成するときにbsonSerialize()メソッドがあるようです。このメソッドは、実際にはPHP配列クラスであるstdClassオブジェクトを返します。ドキュメンテーションによると、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 
} 
+0

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

1

は、もう一つの方法は、次のようになります。

json_encode($bsonDoc->getArrayCopy());

0

私は同じ問題を抱えていたし、これは私が内部値にアクセスする方法です。これはfindで動作します。

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

これは誰かを助けることを望みます。

2

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 
関連する問題