Definição
$not$notexecuta uma operaçãoNOTlógica no<operator-expression>especificado e seleciona os documentos que não correspondem ao<operator-expression>. Isso inclui documentos que não contêm ofield.
Compatibilidade
Você pode utilizar o $not para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O operador $not tem o seguinte formato:
{ field: { $not: { <operator-expression> } } }
Considere o seguinte exemplo:
db.movies.find( { runtime: { $not: { $gt: 180 } } } )
O exemplo seleciona todos os documentos na coleção movies em que:
o valor do campo
runtimeé menor ou igual a180ouo campo
runtimenão existe
{ $not: { $gt: 180 } } difere do operador $lte. { $lte: 180 } retorna apenas os documentos onde o campo runtime existe e seu valor é menor ou igual a 180.
Você deve usar o operador $not com outra expressão de operador. Por exemplo, para usar $not para realizar uma verificação de igualdade, use esta sintaxe:
{ runtime: { $not: { $eq: 120 } } }
A consulta anterior é equivalente a:
{ runtime: { $ne: 120 } }
A query a seguir é inválida porque compara um campo sem um operador:
{ runtime: { $not: 120 } }
Comportamento
arrays
Quando é passado um argumento de array, o operador $not pode gerar resultados inesperados. Para corresponder documentos com base em várias condições falsas, use $nor.
Expressões regulares
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
O operador $not pode executar a operação lógica NOT em:
Objetos de expressão regular (ou seja,
/pattern/)O exemplo a seguir retorna filmes em que
runtimeé maior que1000minutos etitlenão começa com a letraT. Como$nottambém corresponde a documentos que não contêm o campotitle, a query retorna filmes mesmo quando os dados do título não estão disponíveis:db.movies.find( { title: { $not: /^T/ }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1 } ) [ { title: 'Centennial', runtime: 1256 }, { title: 'Baseball', runtime: 1140 } ] $regexexpressão do operadorAs duas queries a seguir retornam filmes em que
runtimeé maior que1000minutos etitlenão começa com a letraT. A primeira query passa uma string para$regex:db.movies.find( { title: { $not: { $regex: "^T" } }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1 } ) [ { title: 'Centennial', runtime: 1256 }, { title: 'Baseball', runtime: 1140 } ] A segunda query passa um literal regex para
$regex:db.movies.find( { title: { $not: { $regex: /^T/ } }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1 } ) [ { title: 'Centennial', runtime: 1256 }, { title: 'Baseball', runtime: 1140 } ] objetos de expressão regular da linguagem do driver
Por exemplo, a seguinte query do PyMongo utiliza o método
re.compile()do Python para compilar uma expressão regular:import re for noMatch in db.inventory.find( { "item": { "$not": re.compile("^p.*") } } ): print noMatch