2014-04-29 50 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。在你的代碼中沒有排序命令;)

相關問題