2016-06-09 3 views
4

나는 하나의 선택적 매개 변수 인 limit을 가지고 있는데, 이는 정수를 취하고 get 요청에서 API로부터 반환 된 문서의 수를 제한합니다.

PHP 응용 프로그램에서 필수 매개 변수 인 경우이 제한을 구현하는 것이 좋습니다. 그러나 요청을 처리 할 때이 매개 변수가 지정되지 않은 경우이를 처리하는 가장 좋은 방법은 무엇입니까?

예를 들어, $ 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 매개 변수가 필요한 경우 필요에 따라 작동합니다. 이제 그 코드가 생략되었을 때 어떻게 위의 코드를 유지할 수 있습니까?

+1

몇 가지 코드를 알려주시겠습니까? –

+3

if else 조건에서 동일한 블록을 유지하십시오. 결과를 제한하지 않고 DB에서 데이터를 가져 오는 좋은 해결책은 아니지만 – shahmanthan9

답변

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); 
+0

이 점을 지적 해 주셔서 고맙습니다. 이것은 매우 명확하고 간결하며 정확하게 내가 찾고있는 것입니다. – ugotchi

+0

도움이 되니 기쁩니다! :) –

1

짧은 대답 아니오!

하지만, 당신이 사용할 수있는이 같은/다른 조건이있는 경우 :

<?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 (...)), 
    ); 
} 
?> 
+0

나는이 선을 따라 생각하고 있었지만 많은 코드를 생략 했으므로이 방법을 사용하는 것이 더 효율적이라고 생각했습니다. ? MongoDB의 개발자가이 목적을 위해 '예외'문자를 추가 할 수 있었던 것처럼 보입니까? – ugotchi

관련 문제