$nin
Nesta página
$nin
$nin
seleciona os documentos onde:o valor de campo especificado não está na array especificada ou
o campo especificado não existe.
Compatibilidade
Você pode utilizar o $nin
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 $nin
tem o seguinte formato:
{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }
Se field
contiver uma array, o operador $nin
selecionará os documentos cujo field
contém uma array sem nenhum elemento igual a um valor na array especificada (por exemplo, <value1>
, <value2>
e assim por diante).
Para comparação de diferentes valores dos tipos de BSON, consulte a ordem de comparação de BSON especificada.
Exemplos
Crie a coleção inventory
:
db.inventory.insertMany( [ { "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] }, { "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] }, { "item": "Maps", "tags": [ "office", "storage" ] }, { "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] } ] )
Selecionar em documentos não correspondentes)
A query seguinte seleciona todos os documentos da collection inventory
onde quantity
não é igual a 5 ou 15.
A query também corresponde a documentos que não têm um campo quantity
.
db.inventory.find( { quantity: { $nin: [ 5, 15 ] } }, { _id: 0 } )
Saída de exemplo:
{ item: 'Pens', quantity: 350, tags: [ 'school', 'office' ] }, { item: 'Maps', tags: [ 'office', 'storage' ] }
Selecionar os elementos que não estão em uma array
Defina o campo exclude
como true
para documentos que não possuem a marcação "school"
.
db.inventory.updateMany( { tags: { $nin: [ "school" ] } }, { $set: { exclude: true } } )
updateMany()
também seleciona um documento quando o documento não contém o campo $nin
correspondente.
O operador de desigualdade $nin
não é muito seletivo, pois geralmente corresponde a uma grande parte do índice. Como resultado, em muitos casos, uma query $nin
com um índice pode não ter um desempenho melhor do que uma query $nin
que deve verificar todos os documentos em uma coleção. Consulte também Seletividade de query.