2011-03-17 97 views
2

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

这不能使用DocumentRepository。我知道这是MongoDB的一个限制,我已经投了virtual collections

所以我想知道什么是检索子类别的最佳方法。我目前的做法是这样的:

<?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; 
    } 
} 

回答

7

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

在嵌套在MongoDB中时,这种循环更常见。因为你得到的是全部文件,所以你必须准备好“深入”一点。通常情况下,这需要编写一些小的帮助方法,比如你写的一些方法。

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

+0

感谢您为我澄清这一点。 – Cobby 2011-03-18 00:03:33