【发布时间】:2013-01-23 20:10:03
【问题描述】:
如何使用 Doctrine MongoDB 查询仅知道其 ObjectId 的对象?按 id 查询,使用$dm->findOneBy(array('id' => $id)) 将只返回一个已区分文档类型的结果,而不返回其他类型的结果。通过命令行查询,例如db.documents.find({ "_id": ObjectId(...) }); 返回预期的行。
编辑:问题似乎是,如果我不知道我要查询的文档类型并且我正在使用自定义存储库,那么使用的文档名称是仅与两个文档类之一的类名相关联(因此对于其他类型的文档返回 0 结果)。这通常是有道理的,因为如果我不知道我正在寻找什么类型的文档,Doctrine 应该如何?给定一个有区别的集合,有没有什么方法可以在存储库中自动使用正确的文档名称,而无需明确告知教义?
请参阅下面的问题抽象。
谢谢!
我在同一个 documents 集合中有一组可区分的文档,由它们的 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>
【问题讨论】:
标签: mongodb doctrine-odm doctrine-mongodb