2017-04-08 12 views
0

私はよく見ていましたが、私の質問に対する答えを見つけることができないようです。いくつかの異なる組み込みドキュメントタイプを持つ次のドキュメントがある場合、他のドキュメントとは独立して各ドキュメントのタイプマップを設定するにはどうすればよいですか?埋め込み文書でMongoDB/PHPの型マップを個別に設定する

$cursor = $mongo->executeQuery("TestDB.TestCollection", new MongoDB\Driver\Query([])); 
$cursor->setTypeMap(['root' => 'RootObj', 'document' => 'SomeOtherObj']); 

これはSomeOtherObjクラスのインスタンスに埋め込まれた文書のすべてをアンシリアライズし、ルートドキュメントう:私はPHP7 MongoDB driverを使用して、すべての埋め込みドキュメントの型マップを設定することができます方法を知っている

{ 
    _id : ObjectId("bf98321fba31233"), 
    name : "Example", 
    comments : [ 
     comment : { _id : ObjectId("bf98321fba31233"), text : "Example comment type" }, 
     comment : { _id : ObjectId("bf98321fba31233"), text : "Another example" } 
    ], 
    attachments : [ 
     attachment : { _id : ObjectId("bf98321fba31233"), url : "/var/www/blah/foo" }, 
     attachment : { _id : ObjectId("bf98321fba31233"), url : "/var/www/blah/bar" } 
    ] 
} 

RootObjクラスに追加します。私が本当にやりたいことは、埋め込まれたドキュメントの種類ごとにこれを指定することです。

$cursor->setTypeMap(['root' => 'RootObj', 'comment' => 'CommentObj', 'attachment' => 'AttachmentObj']); 

できますか?

+1

説明している機能はまだ実装されていません。関連するトラッキングチケットは[PHPC-314](https://jira.mongodb.org/browse/PHPC-314)です。 – jmikola

+0

@jmikolaヘッドアップのおかげで – ryansin

答えて

0

私はよく読んだことがあり、以前に存在しなかったクラスが見つかりました。これはMongoDBがタイプマップを明示的に設定することなく各オブジェクトがどのクラスに属しているかを記憶することを可能にします。 MongoDB\BSON\SerializableMongoDB\BSON\Unserializableを実装したクラスオブジェクトをMongoDB\BSON\Persistableに変更しました。

MongoDB\BSON\Persistableは、シリアル化中に使用されたクラスへの参照である__pclass変数をドキュメントに挿入します。この参照を使用して、どのクラスを直列化解除して型マップに上書きするかを決定します。

MongoDB\BSON\Persistable

関連する問題