Jak mogę użyć operatora „Not Like” w MongoDB


98

Potrafię używać Likeoperatora SQL używając pymongo,

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

Ale jak mogę używać Not Likeoperatora?

próbowałem

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

ale pojawił się błąd:

OperationFailure: $ not nie może mieć wyrażenia regularnego


1
Wiem, że to trochę za późno, ale w MongoDB 4.2 kombinacja operatora $noti $regexwydaje mi się działać.
b00r00x0

Odpowiedzi:


139

Z dokumentów :

Operator $ not nie obsługuje operacji z operatorem $ regex. Zamiast tego użyj // lub w interfejsach sterownika, użyj możliwości wyrażeń regularnych swojego języka do tworzenia obiektów wyrażeń regularnych. Rozważmy następujący przykład, w którym zastosowano wyrażenie dopasowania do wzorca //:

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

EDYCJA (@idbentley):

{$regex: 'ttt'}jest generalnie odpowiednikiem /ttt/in mongodb, więc zapytanie wyglądałoby następująco:

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

EDIT2 (@KyungHoon Kim):

W Pythonie działa poniżej:

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

2
Żeby było jasne, {$regex: 'ttt'}jest generalnie równoważne z /ttt/in mongodb, więc twoje zapytanie wyglądałoby następująco db.test.find({c: {$not: /ttt/}}.
idbentley,

@idbentley dziękuję. Zaktualizowałem moją odpowiedź o Twoje wyjaśnienie.
shx2

1
Dziękuję bardzo. Dla innych ludzi użyłem 'c':{'$not':re.compile('ttt')}. Oczywiście, musi importować re
KyungHoon Kim

Wspaniały. Dodałem również twój komentarz do odpowiedzi, dla potomności.
shx2

1
Wydaje się, że wygląda to tak samo w przypadku $ ne i $ regex. Czy ktoś może to potwierdzić lub przynajmniej dodać do tego?
DBrown

56

Możesz zrobić z wyrażeniem regularnym, które nie zawiera słowa. Można również użyć $options => iw przypadku wyszukiwania niewrażliwego.

Nie zawiera string

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

Bez rozróżniania wielkości liter string

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

Zaczynać z string

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

Kończy się na string

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

Zawiera string

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

Zachowaj to jako zakładkę i odniesienie do innych zmian, których możesz potrzebować. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.