2017-04-08 51 views
0

我有一個很好的看看,但我似乎無法找到我的問題的答案。如果我有以下幾種不同的嵌入式文檔類型的文檔,如何獨立設置每個文檔的類型映射?MongoDB/PHP在嵌入式文檔中獨立設置地圖類型

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

我知道我可以使用PHP7 MongoDB driver設置一個類型映射所有嵌入式文件:

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

這將反序列化所有的嵌入式文件到SomeOtherObj類的實例,和根文件進入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