Как я могу использовать оператор "Не нравится" в MongoDB
Я могу использовать оператор SQL Like
, используя pymongo
,
db.test.find({'c':{'$regex':'ttt'}})
Но как я могу использовать Not Like
Operator?
Я пытался
db.test.find({'c':{'$not':{'$regex':'ttt'}})
но получил ошибку:
OperationFailure: $ not не может иметь регулярное выражение
Ответы
Ответ 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/