检索嵌入的文档

Cob*_*bby 2 php doctrine mongodb

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

使用DocumentRepository时这不起作用.我知道这是MongoDB目前的限制,我已经投票支持虚拟馆藏.

所以我想知道检索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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Gat*_* VP 7

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

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

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