如何使用 Doctrine MongoDB 查询只知道其 ObjectId 的对象?通过 id 查询,using$dm->findOneBy(array('id' => $id))
将只返回一种已区分文档类型的结果,而不返回其他类型的结果。通过命令行查询,例如db.documents.find({ "_id": ObjectId(...) });
返回预期的行。
编辑:问题似乎是,如果我不知道我要查询的文档类型并且我正在使用自定义存储库,则使用的文档名称仅与其中一个的类名称相关联两个文档类(因此对于其他类型的文档返回 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>