Подтвердить что ты не робот

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

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

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

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

Я пытался

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

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

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

4b9b3361

Ответ 1

Из 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

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