检索嵌入的文档

时间:2011-03-17 00:46:48

标签: php doctrine mongodb

如果我有一个名为Category的文档,它嵌入了许多SubCategory文档......检索SubCategory的最佳方法是什么(例如基于ID)。

使用DocumentRepository时无效。我知道这是MongoDB目前的限制,我已经在virtual collections投了票。

所以我想知道检索SubCategory的最佳方法是什么。我目前的方法如下:

<?php

$category = $dm->createQueryBuilder('Category')
                ->field('subCategories._id', new \MongoId($id))
            ->getQuery()->getSingleResult();

foreach($category->getSubCategories() as $sub){
    if($sub->getId() === $id){
        $subCategory = $sub;
        break;
    }
}

1 个答案:

答案 0 :(得分:7)

所以MongoDB的本质是你不能独立于父文件返回“子文档”。因此,在检索子类别时,您必须撤回父类别,然后循环查找子对象。

在MongoDB中嵌套时,这种类型的循环更常见。因为你要获得整个文件,所以你必须准备好“向下钻取”一点。通常,这涉及编写一些小助手方法,例如您编写的方法。

您提供的代码似乎完全合理。在PHP中,我强烈建议将其包含在适当对象的方法中,例如Category::GetSubCategory($id)