У меня есть таблица с некоторым адресом электронной почты пользователя, например:
[email protected]
test@test_mail.com
test2@test_mail.com
admin@company_mail.com
[email protected]
sales@company_mail.com
[email protected]
Я хочу получить список пользователей с электронными письмами, не заканчивающимися на @ test_mail.com ИЛИ @ company_mail.com.
Мне удалось это с помощью следующего запроса монго:
db.users.find({
userEmail: {
$nin: [/@test_mail.com$/,/@company_mail.com$/]
}
})
Я попытался выполнить тот же запрос в PHP со следующим кодом, но не смог заставить его работать:
$criteria = array(
"userEmail" => array(
'$nin' => array(
'$regex' => new \MongoRegex("/@test_mail.com|@company_mail.com/i")
)
)
);
$cursor = $collection->find($criteria);
Какие-либо предложения?
Правильный способ применить это с единичным объектом MongoRegex и $not
Оператор отменить условие:
$cursor = $users->find(array(
"userEmail" => array(
'$not' => new MongoRegex('/\@test_mail\.com$|\@company_mail\.com$/i')
)
));
foreach ( $cursor as $doc ) {
var_dump( $doc );
}
То же самое относится и к $nin
где вы можете указать аргумент «regex», но это должен быть тип «object» регулярного выражения, а не форма оператора:
$cursor = $user->find(array(
"userEmail" => array(
'$nin' => array(new MongoRegex('/\@test_mail\.com$|\@company_mail\.com$/i'))
)
));foreach ( $cursor as $doc ) {
var_dump( $doc );
}
Но в действительности это необязательно, поскольку вы не предоставляете «массив» различных значений, регулярное выражение может представлять само условие «или».
Вы не должны использовать $ nin в этом случае, я бы попробовал что-то вроде этого:
$criteria = array(
"userEmail" => array(
'$not' => array(
'$or' => array(
'$regex' => new \MongoRegex("/@test_mail\.com$/i"),
'$regex' => new \MongoRegex("/@company_mail\.com$/i"),
),
),
)
);
UPD:
Вы можете попробовать это:
$criteria = array(
'$not' => array(
'$or' => array(
"userEmail" => array('$regex' => new \MongoRegex("/@test_mail\.com$/i")),
"userEmail" => array('$regex' => new \MongoRegex("/@company_mail\.com$/i")),
),
),
)
);