2013-11-24 1 views

ответ

80

От docs:

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

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

EDIT (@idbentley):

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

EDIT2 (@KyungHoon Kim):

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

+2

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

+0

@idbentley спасибо. Я обновил свой ответ с разъяснением. – shx2

+1

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

27

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

End с 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/