Как я могу использовать оператор «Не нравится» в MongoDB

49

Я использовал оператор SQL "Like" с помощью pymongo,

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

Но как я могу использовать оператор "Не нравится"?

Я пробовал

db.test.find({'c':{'$not':{'$regex':'ttt'}})
Теги:
mongodb-query
pymongo
sql-like

2 ответа

70
Лучший ответ

Из docs:

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

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

EDIT (@idbentley):

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

EDIT2 (@KyungHoon Kim):

В python это работает: 'c':{'$not':re.compile('ttt')}

  • 2
    Для ясности, {$regex: 'ttt'} обычно эквивалентно /ttt/ в mongodb, поэтому ваш запрос станет db.test.find({c: {$not: /ttt/}} .
  • 0
    @idbentley спасибо. Я обновил свой ответ с вашими разъяснениями.
Показать ещё 3 комментария
26

Вы можете делать с регулярным выражением, которое не содержит слова. Также вы можете использовать $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/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню