mongodb 聚合中的 $limit 作为可选参数?
$limit in mongodb aggregation as an optional parameter?
我有一个 api,它有一个名为 limit 的可选参数,它接受一个整数并限制从 api 获取请求中返回的文档数量。
当它是必需参数时,在我的 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 参数时,它会按要求运行。现在当它被省略时,我怎样才能保留上面的代码但不指定限制?
简答否!
但是,您可以使用这样的 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 ( ... )),
);
}
?>
您可以手动生成 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);
我有一个 api,它有一个名为 limit 的可选参数,它接受一个整数并限制从 api 获取请求中返回的文档数量。
当它是必需参数时,在我的 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 参数时,它会按要求运行。现在当它被省略时,我怎样才能保留上面的代码但不指定限制?
简答否!
但是,您可以使用这样的 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 ( ... )),
);
}
?>
您可以手动生成 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);