如果我有一个名为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;
}
}
答案 0 :(得分:7)
所以MongoDB的本质是你不能独立于父文件返回“子文档”。因此,在检索子类别时,您必须撤回父类别,然后循环查找子对象。
在MongoDB中嵌套时,这种类型的循环更常见。因为你要获得整个文件,所以你必须准备好“向下钻取”一点。通常,这涉及编写一些小助手方法,例如您编写的方法。
您提供的代码似乎完全合理。在PHP中,我强烈建议将其包含在适当对象的方法中,例如Category::GetSubCategory($id)
。