mongodb聚合中的$ limit作为可选参数?

时间:2016-06-09 15:18:26

标签: php mongodb aggregation-framework mongodb-php

我有一个带有一个名为limit的可选参数的api,它接受一个整数并限制在get请求中从api返回的文档数。

当我的PHP应用程序是必需参数时,在我的PHP应用程序中实现此限制很好,但是当它未被指定为我的get请求的一部分时,处理它的最佳方法是什么?

有没有例如,一种定义$ limit并将其设置为所有文档的方法? (伪代码,$ limit = none)

$list = $collection->aggregate( array( array('$match' => array( ... )),
  '$project' => array ( ... )), '$limit' => intval($this->limit) ));

$this->limit //this is the optional input parameter

如上所示,当需要limit参数时,它可以根据需要运行。现在当它被省略时,我如何保留上面的代码但是没有指定限制?

2 个答案:

答案 0 :(得分:2)

您可以手动生成where子句。

// Declare a where clause with your fixed conditions
$whereClause = array(array('$match' => array(...)), array('$project' => array(...)));

// Check if there's a limit
if($this->limit != 0)
    array_push($whereClause, array('$limit' => $this->limit));

// Finally, call with the where clause we've generated above
$list = $collection->aggregate($whereClause);

答案 1 :(得分:1)

简短回答不!

但是,你可以像这样使用if / else条件:

<?php

if(intval($this->limit) != 0 ) {
    $list = $collection->aggregate( array( 
        array('$match' => array( ... )),
        array('$project' => array ( ... ))
        array('$limit' => intval($this->limit)) 
    );

    ));
} else {
    $list = $collection->aggregate( array( 
        array('$match' => array( ... )),
        array('$project' => array ( ... )), 
    );
}
?>