2014-04-29 49 views
2

我无法对嵌入文档进行排序。这是我的代码。使用Doctrine ODM对Symfony2中的嵌入文档进行排序

Children.php

namespace Acme\CCBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class Children { 
/.. 
    /** 
    * @MongoDB\EmbedMany(targetDocument="Vaccine") 
    */ 
    protected $vaccine = array(); 
} 

Vaccine.php

namespace Acme\CCBundle\Document; 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 
/** 
* @MongoDB\EmbeddedDocument 
*/ 
class Vaccine 
{ 
    /** 
    * @MongoDB\Date 
    */ 
    protected $recordDate; 

    /** 
    * @MongoDB\String 
    */ 
    protected $vaccineName; 
} 

在我的控制器:RecordController.php

public function showVaccineAction($id) { 
     $child = $this->get('doctrine_mongodb') 
       ->getRepository('AcmeCCBundle:Children') 
       ->find($id); 

     $vac = $child->getVaccine(); 

     return $this->render(
         'AcmeCCBundle:Record:show_vaccine.html.twig', array('vac' => $vac) 
     ); 
    } 

我只能够查询一个孩子的所有疫苗,并没有订购。有谁能够帮助我?

回答

0

您无法对mongodb中的嵌入文档进行排序(分别在doctrine odm中)。

您可以使用两个选项:

  1. 更新嵌入文档与排序 - 你会重新创建的文件,所以没有必要排序(默认情况下返回的MongoDB通过创建顺序排列的文档)。 使用这种情况下,如果文件不是很多和/或永久存储排序结果

  2. 在mongodb中使用聚合 - 您将通过嵌入文档进行非规范化并以任何方式排序。 big minus - 结果可能与原始文档不同,并且不能保存到ODM类(映射到文档的问题)。 使用此情况下,如果文件是过多和/或导致存储临时的(例如,仅在模板示出)

PS。在你的代码中没有排序命令;)

相关问题