Como posso usar o operador 'Não gosto' no MongoDB


98

Posso usar o SQL LikeOperator usando pymongo,

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

Mas como posso usar o Not LikeOperator?

eu tentei

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

mas obteve um erro:

OperationFailure: $ not não pode ter um regex


1
Eu sei que é um pouco tarde, mas no MongoDB 4.2 o operador $note $regexem combinação parece funcionar para mim.
b00r00x0

Respostas:


138

Dos documentos :

O operador $ not não oferece suporte a operações com o operador $ regex. Em vez disso, use // ou em suas interfaces de driver, use o recurso de expressão regular de sua linguagem para criar objetos de expressão regular. Considere o seguinte exemplo que usa a expressão de correspondência de padrão //:

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

EDIT (@idbentley):

{$regex: 'ttt'}geralmente é equivalente a /ttt/em mongodb, então sua consulta se tornaria:

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

EDIT2 (@KyungHoon Kim):

Em python , abaixo funciona:

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

2
Para ser claro, {$regex: 'ttt'}geralmente é equivalente a /ttt/em mongodb, então sua consulta se tornaria db.test.find({c: {$not: /ttt/}}.
idbentley

@idbentley obrigado. Eu atualizei minha resposta com seu esclarecimento.
shx2

1
Muito obrigado. Para outras pessoas, eu usei 'c':{'$not':re.compile('ttt')}. Claro, você precisa importar novamente
KyungHoon Kim

Ótimo. Também acrescentei seu comentário à resposta, para a posteridade.
shx2

1
Este parece ser o mesmo caso com $ ne e $ regex. Alguém pode confirmar isso, ou pelo menos acrescentar algo?
DBrown

55

Você pode fazer com regex que não contém uma palavra. Além disso, você pode usar $options => ipara o caso de pesquisa insensível.

Não contém string

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

Não diferencia exatamente maiúsculas de minúsculas string

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

Começa com string

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

Termina com string

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

Contém string

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

Guarde-o como um marcador e uma referência para quaisquer outras alterações que você possa precisar. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.