2017-01-20 10 views
0

поиск MongoDB с PHP код:Поиск данных MongoDB с PHP

$cond=array(); 
$cond=array_merge($cond,array("clicks" => array('$gt' =>6)));  

if (isset($lang)){ 
    $cond=array_merge($cond,array("$or" => array(array("lang" =>'de'),array("lang" =>'fr')))); 
} 

if (isset($country)){  
    $cond=array_merge($cond,array("$or" => array(array("country" =>'us'),array("country" =>'uk')))); 
} 

Проблема: На последней строке второй $or страны заменяет первый $or Ланг. Было бы здорово, если кто-нибудь может предложить, как мы можем избежать этой главной проблемы?

На самом деле я новичок в MongoDB, я хочу создать запрос на поиск в MongoDB. Я должен построить запрос на основе некоторых флагов условия (например, если «$ country = true», а затем фильтр встраивания страны) для каждого столбца. Подобно SQL Выход мне нужно это:

"Где щелкает> 6 и (LANG = 'де' или языки = 'фр') и (страна = 'нам' или страна = 'ик')"

+0

Hello Imran Mirza, и добро пожаловать в переполнение стека. Мне сложно понять вашу проблему; возможно ли вам отредактировать вопрос, чтобы уточнить, что происходит не так? Если вы прямо скажете, что вы пытались сделать в сравнении с тем, что на самом деле произошло, это было бы полезно. –

+0

Спасибо, я обновил свой вопрос. –

ответ

0

Это как ваш результирующий массив должен выглядеть следующим образом:

$cond = [ 
    '$and' => [ 
     ['clicks' => [ '$gt' => 6 ]], 
     ['$or' => [ 
      [ 'lang' => 'de' ], 
      [ 'lang' => 'fr' ] 
     ]], 
     ['$or' => [ 
      [ 'country' => 'us' ], 
      [ 'lang' => 'uk' ] 
     ]] 
    ] 
]; 

Теперь, чтобы добиться этого, используя модульный подход, указанный, вы могли бы сделать что-то вроде этого:

$cond = [ 
    '$and' => [ 
     ['clicks' => [ '$gt' => 6 ]] 
    ] 
]; 

if (isset($lang)) { 
    $cond['$and'][] = ['$or' => [['lang' =>'de'], ['lang' =>'fr']]]; 
} 
if (isset($country)) { 
    $cond['$and'][] = ['$or' => [['country' =>'us'], ['country' =>'uk']]]; 
} 

Надеюсь, это продемонстрирует путь для сборки вложенных или/или запросов в PHP, поэтому вы можете настроить его по мере того, как потребует ваш дизайн.

+0

Спасибо Император, но я не могу сделать это за один шаг, потому что я создаю запрос на основе некоторых условий. if (isset ($ lang)) { $ cond = array_merge ($ cond, array ("$ or" => array (array ("lang" => 'de'), array ("lang" => ' фр ')))); } if (isset ($ country)) { $ cond = array_merge ($ cond, array ("$ or" => array (array ("country" => 'us'), array ("lang" = > 'ик')))); } –

+0

@imranmirza Я обновил свой ответ, чтобы ответить на вопрос, который вы сформулировали. Обратите внимание на одинарные кавычки вокруг операторов - это важно. – Imperator

+0

Прекрасное спасибо. –