使用Doctrine ODM在Symfony2中对嵌入式文档进行排序

时间:2014-04-29 08:46:40

标签: php mongodb symfony doctrine-orm

我无法对嵌入文档进行排序。这是我的代码。

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

我只能查询孩子的所有疫苗,而且没有订购。有谁能够帮我?

1 个答案:

答案 0 :(得分:0)

你不能在mongodb中对嵌入式文档进行排序(分别在doctrine odm中)。

您可以使用两个选项:

  1. 使用排序更新嵌入式文档 - 您将重新创建文档,因此无需排序(默认情况下mongodb返回按创建顺序排序的文档)。 如果文件不多和/或永久存储分类结果,则使用此案例

  2. 在mongodb中使用聚合 - 您可以通过嵌入式文档进行反规范化并以任何方式排序。 大减号 - 结果可能与原始文档不同,并且不能水合到ODM类(映射到文档的问题)。 如果文件太多和/或结果存储临时(例如仅显示在模板中)

  3. ,请使用此案例

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