Doctrine MongoDB を使用して ObjectId のみを知っているオブジェクトを照会するにはどうすればよいですか? ID によるクエリを使用$dm->findOneBy(array('id' => $id))
すると、識別されたドキュメント タイプの 1 つの結果のみが返されますが、その他のドキュメント タイプは返されません。コマンド ライン経由でクエリを実行すると、たとえばdb.documents.find({ "_id": ObjectId(...) });
、期待される行が返されます。
編集:問題は、クエリしているドキュメントのタイプがわからず、カスタム リポジトリを使用している場合、使用されるドキュメント名が、 2 つのドキュメント クラス (したがって、他の種類のドキュメントでは 0 の結果が返されます)。探しているドキュメントの種類がわからない場合、Doctrine はどのようにすればよいのでしょうか? 識別されたコレクションが与えられた場合、教義を明示的に伝えずに、リポジトリで正しいドキュメント名を自動的に使用する方法はありますか?
問題の抽象化については、以下を参照してください。
ありがとう!
私は、同じ文書コレクション内に、type
分野によって識別された、識別された一連の文書を持っています。
{
"_id" : ObjectId("510fdb6c91a4cb4c25000000"),
"name" : "Contract",
"type" : "document"
}
{
"_id" : ObjectId("510fdb6c91a4cb4c25000001"),
"name" : "Tutorial",
"length_min": "60"
"type" : "video"
}
...
Document
とクラスの両方のマッピングはVideo
次のようになります。
<!-- "Doc" Document mapping -->
<doctrine-mongo-mapping ...>
<document name="Doc" collection="documents" repository-class="DocRepository">
<discriminator-field fieldName="type" />
<discriminator-map>
<discriminator-mapping value="document" class="Doc" />
<discriminator-mapping value="video" class="Video" />
</discriminator-map>
<field fieldName="id" id="true" />
<field fieldName="name" field="name" type="string" />
</document>
</doctrine-mongo-mapping>
<!-- "Video" Document mapping -->
<doctrine-mongo-mapping ...>
<document name="Video" collection="documents" repository-class="DocRepository">
<discriminator-field fieldName="type" />
<discriminator-map>
<discriminator-mapping value="document" class="Doc" />
<discriminator-mapping value="video" class="Video" />
</discriminator-map>
<field fieldName="id" id="true" />
<field fieldName="name" field="name" type="string" />
<field fieldName="length_min" field="length_min" type="int" />
</document>
</doctrine-mongo-mapping>