Я знаю, что есть множество тем о «MongoDB $ или PHP», но я не могу этого понять;
Предполагая, что у меня есть коллекция Compagnies
:
$Mongo->Compagnies->insert({"Name":"BoldLine", "Service":"Billing", "Description":"Hello World"});
$Mongo->Compagnies->insert({"Name":"Behobe", "Service":"Development", "Description":"Here we are cool"});
Мне нужно выполнить запрос ‘или’ для этой коллекции, используя регулярное выражение. Так я и сделал:
use \MongoRegex as MR;
$regex = new MR ("/B/i"); //Where field contains the letter 'B'
$Mongo->Compagnies->find(
array(
'$or' => array(
array(
"Name" => $regex,
"Service" => $regex,
"Description" => $regex
)
)
)
);
Но есть 0 результат. Зачем? Результат не должен быть 2 строки?
Теперь, если я сделаю:
$Mongo->Compagnies->find(
array(
'$or' => array(
array(
"Name" => $regex,
"Service" => $regex
)
)
)
);
Результатом будет только первая строка. Я не понимаю, почему вторая строка не соответствует запросу, потому что в имени также есть буква «B». Кажется, оператор ‘$ or’ действует как ‘$ and’.
Я что-то пропустил? Как я могу выбрать все объекты, содержащие букву «B» в одном из 3 полей, даже если одно или несколько других полей не содержат эту букву?
Спасибо 🙂
Каждое условие или условие должно быть в другом массиве.
Попробуй это:
$Mongo->Compagnies->find(
array(
'$or' => array(
array(
"Name" => $regex,
),
array(
"Service" => $regex,
),
array(
"Description" => $regex,
),
)
)
);
Других решений пока нет …