2016-06-09 1 views
4

У меня есть api с одним необязательным параметром с именем limit, который принимает целое число и ограничивает количество документов, возвращенных из api в запросе get.

Реализация этого предела в моем PHP-приложении прекрасна, когда он является обязательным параметром, но когда он не указан как часть моего запроса на получение, как наилучшим образом его обрабатывать?

есть, например, способ определить $ limit и установить его для всех документов? (В псевдокоде, $ предел = нет)

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

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

Как вы можете видеть выше, когда предельный параметр необходим он функционирует в соответствии с требованиями. Теперь, когда его пропущено, как я могу сохранить вышеуказанный код, но не указывать лимит?

+1

Можете ли вы показать нам какой-нибудь код, пожалуйста? –

+3

сохранить тот же блок, если условие else. Хотя это нехорошее решение, когда вы извлекаете данные из БД, не ограничивая свой результат – shahmanthan9

ответ

2

Вы можете вручную сгенерировать где положение.

// 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