Symfony2 app,MongoDB:计算所有匹配条件的记录

时间:2014-07-25 13:26:01

标签: mongodb symfony doctrine-orm mongodb-query

在我的控制器中,我正在获取有限数量的对象(用于分页),如下所示:

    $dm   = $this->get('doctrine_mongodb');
    $repo = $dm->getRepository('AcmeMyBundle:MyDocument');

    $criteria = array(
        'field1'    => 'value1',
        'field1'    => 'value1',
    );

    $logs = $repo->findBy(
        $criteria,                      /* criteria */
        array($field => $direction),    /* sort */
        $limit,                         /* limit */
        (($page-1)*$limit)?:null        /* skip */
    );

现在,我希望获得符合$criteria的记录总数。

我试图像这样算:

$count = $repo->createQueryBuilder('MyDocument')
    ->count()->getQuery()->execute();

但它会计算收集中的所有记录。如何将$criteria应用于该计数查询?

我需要结果为原生MongoDB db.MyDocument.find({'field2': "value1", 'field2': "value2"}).count()

1 个答案:

答案 0 :(得分:1)

完成它:

    $countQuery = $repo
        ->createQueryBuilder('MyDocument')
        ->requireIndexes(false)
        ;

    foreach(array_filter($criteria) as $field=>$value){
        $countQuery->field($field)->equals($value);
    }

    $count = $countQuery->count()->getQuery()->execute();