У меня проблемы с достижением этого.
У меня есть этот кусок кода, который я тестировал в Rock Mongo, и он отлично работает.
array(
'TEST' =>
array( '$in' =>
array( new MongoRegex('/^(?!TESTVALUE)/$ig'))
)
)
Приведенный выше фрагмент кода возвращает мне все документы, которые не имеют значения «TESTVALUE» для ключа «TEST».
Теперь, чего я хочу достичь?
Во-первых, я не знаю, как написать фрагмент кода для извлечения всех документов, которые не имеют значений «TESTVALUE» & «ВТОРОЕ» для ключа «ТЕСТ».
Это будет что-то вроде этого:
array(
'TEST' =>
array( '$in' =>
array( new MongoRegex('/^(?!TESTVALUE)/$ig'),new MongoRegex('/^(?!SECONDVALUE)/$ig') )
)
)
А также мне понадобится выше кусок кода, написанный на PHP.
Любая помощь или предложения приветствуются и будут оценены.
заранее спасибо
Я не думаю, что вы можете использовать $ таким образом, но это должно работать:
'TEST' => array('$and' => array(
array('$regex' => new MongoRegex('/^(?!TESTVALUE)/$ig'),
array('$regex' => new MongoRegex('/^(?!TESTVALUE)/$ig')))
что-то на этот счет (не проверено)
Ваши запросы и ваше описание, кажется, противоречат друг другу. Если вам нужен запрос для всех документов, в которых нет значения строки в качестве значения поля, почему вы используете регулярные выражения? Вы не хотите, чтобы значение было подстрокой значения поля? Если вы просто хотите сделать запрос типа «найти документы, где значение TEST
поле не «X» или «Y», используйте $nin
(«не в»):
db.collection.find({ "TEST" : { "$nin" : ["X", "Y"] } })
Если поле должно соответствовать нескольким регулярным выражениям, то либо объедините их в одно регулярное выражение, либо объедините условия с $and
,