2011-03-17 4 views
2

Si j'avais un document appelé Catégorie, qui incorpore de nombreux documents de sous-catégorie ... quel est le meilleur moyen de récupérer une sous-catégorie (par exemple en fonction de l'ID).Récupération d'un document incorporé

Cela ne fonctionne pas avec un DocumentRepository. Je suis conscient que ceci est une limitation actuelle de MongoDB et j'ai déjà voté sur virtual collections. Donc, je me demande quelle est la meilleure façon de récupérer une sous-catégorie. C'est ce que je veux savoir. Mon approche actuelle ressemble à ceci:

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

Répondre

7

donc la nature de MongoDB est que vous ne pouvez pas revenir « sous-documents » indépendamment de leurs documents parents. Ainsi, lors de la récupération d'une sous-catégorie, vous devrez retirer la catégorie parente puis faire une boucle pour trouver le sous-objet.

Ce type de bouclage est plus courant lors de l'imbrication dans MongoDB. Parce que vous obtenez des documents entiers, vous devez être prêt à "descendre" un peu. Généralement, cela implique d'écrire quelques petites méthodes d'aide comme celle que vous avez écrite.

Le code que vous avez présenté semble tout à fait raisonnable. En PHP, je suggère fortement d'envelopper ceci dans une méthode sur un objet approprié, quelque chose comme Category::GetSubCategory($id).

+0

Merci de m'avoir éclairci. – Cobby

Questions connexes