2011-03-17 174 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