2

我有一份文件,其中包含对其他一些文件的引用。像大多数人一样,我在 URL 的“id”字段中使用 MongoId 来查看这些文档。情况是我想从主文档中显示这些参考文档的链接。为了获取引用文档的 ID,我使用如下代码:

$mainDocument->getReferencedDoc()->getId();

这里明显的烦恼是,学说将运行另一个查询来获取引用的文档,这样我就可以获得 ID。但是从技术上讲,该 ID 已经存在于参考字段的主文档中。难道不应该有一种更有效的方法来仅获取 ID 而无需查询和补充整个参考文档吗?每次我想这样做时都必须编写自定义查询吗?

当您生成包含指向其引用文档的链接的主要文档的大型列表时,该问题变得很重要。

4

3 回答 3

0

如果有人需要正确的方法来获取引用的 MongoDB 文档的标识符而不(!)延迟加载它,就是这样:

/** @var $metaData \Doctrine\ODM\MongoDB\Mapping\ClassMetadata */
$metaData = $this->documentManager->getClassMetadata('SomeReferencedDocument');
$metaData->getIdentifierValue($object->getSomeReferencedDocument())

而不是(使用最新的 DoctrineODMBundle 仍然延迟加载引用的文档):

$object->getSomeReferencedDocument()->getId();
于 2013-09-16T18:33:46.547 回答
0

最简单的方法是在 Document 类中添加第二个属性。

/**
 * @ReferenceOne(targetDocument="SomeOtherDocument", simple=true)
 */
protected $referencedDoc;

/**
 * @Field(name="referencedDoc", type="string")
 */
protected $referencedDocId;

现在你可以做$document->getReferencedDocId();。由于 type=string,我不完全确定这是可能的。我确实将它与 ORM 一起使用,但尚未将它与 ODM 一起使用。

于 2012-07-02T15:35:17.163 回答
0

自2 月 6 日提交以来,似乎确实表现得如此。所以这个问题通过使用最新的mongodb-odm解决了。

于 2012-07-07T18:03:34.513 回答