Найти данные MongoDB с переполнением стека

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 = ‘de’ или lang = ‘fr’) и (страна = ‘us’ или страна = ‘uk’)»

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector