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’)»
Вот как должен выглядеть ваш результирующий массив:
$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, так что вы можете изменить его в соответствии с требованиями вашего дизайна.
Других решений пока нет …