Как я могу использовать оператор Not Like в MongoDB


98

Я могу использовать Likeоператор SQL, используя pymongo,

db.test.find({'c':{'$regex':'ttt'}})

Но как я могу использовать Not LikeОператора?

Я попытался

db.test.find({'c':{'$not':{'$regex':'ttt'}})

но получил ошибку:

OperationFailure: $ not не может иметь регулярное выражение


1
Я знаю , что это совсем немного поздно , но в MongoDB 4.2 $notи $regexоператор в комбинации , кажется, работает для меня.
b00r00x0

Ответы:


139

Из документов :

Оператор $ not не поддерживает операции с оператором $ regex. Вместо этого используйте // или в интерфейсах драйвера используйте возможность регулярного выражения вашего языка для создания объектов регулярных выражений. Рассмотрим следующий пример, в котором используется выражение сопоставления с шаблоном //:

db.inventory.find( { item: { $not: /^p.*/ } } )

EDIT (@idbentley):

{$regex: 'ttt'}обычно эквивалентен /ttt/в mongodb, поэтому ваш запрос будет выглядеть следующим образом:

db.test.find({c: {$not: /ttt/}}

EDIT2 (@KyungHoon Ким):

В python работает один ниже:

'c':{'$not':re.compile('ttt')}

2
Для ясности, {$regex: 'ttt'}обычно это эквивалент /ttt/в mongodb, поэтому ваш запрос будет иметь вид db.test.find({c: {$not: /ttt/}}.
idbentley

@idbentley, спасибо. Я обновил свой ответ вашим пояснением.
shx2

1
Огромное спасибо. Для других я использовал 'c':{'$not':re.compile('ttt')}. Конечно, вам нужен реимпорт
Кюн Хун Ким

Отлично. Я также добавил ваш комментарий к ответу для потомков.
shx2

1
Похоже, то же самое и с $ ne и $ regex. Кто-нибудь может это подтвердить или хотя бы добавить к этому?
DBrown

56

Вы можете использовать регулярное выражение, которое не содержит слова. Также вы можете использовать $options => iдля нечувствительного поиска.

Не содержит string

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

Без учета регистра string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

Начинается с string

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

Заканчивается на string

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

Содержит string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

Сохраните это как закладку и ссылку для любых других изменений, которые могут вам понадобиться. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.