$nin (Não Está Em Array)
Última atualização: 2026-10-09
$nin (Não Está Em Array)
$nin seleciona documentos onde o valor do campo não é igual a nenhum valor do array fornecido — a negação de $in. `{ age: { $nin: [18, 21] } }` corresponde a usuários que não têm 18 nem 21 anos. Assim como $ne, não corresponde a documentos com o campo ausente; em campos de array, corresponde quando qualquer elemento não está no array.
| Categoria | Comparação |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ <campo>: { $nin: [ <valor1>, <valor2>, ... ] } }
⚙️ Parâmetros
| campo | O campo do documento a corresponder. |
|---|---|
| array de valores | A lista de valores a excluir; o campo não deve ser igual a nenhum deles. |
Retorno:Cursor dos documentos correspondentes
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $nin: exclui usuários com 18 e 21 anos
db.users.find({ age: { $nin: [18, 21] } })
// Documentos com o campo ausente não são retornados
db.users.find({ age: { $nin: [18] } })
Saída:
// Retorna usuários cujo age não é nem 18 nem 21; documentos com campo ausente são excluídos
📌 Notas
- Não corresponde a documentos com o campo ausente; combine com $exists para incluí-los
- Em campos de array, corresponde quando qualquer elemento não está no array
- Use $ne para um único valor, $nin para uma lista inteira
🏷️ Tags Relacionados
💡 Casos Relacionados
Noções básicas sobre consultas a documentos: o método `find` e as projeções
Operadores de consulta: um guia completo com mais de 30 operadores
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre $nin e $ne?
A$ne exclui um valor, $nin exclui uma lista; ambos significam diferente-de, $nin é a forma em lote.
Q$nin retorna documentos onde o campo não existe?
ANão. Assim como $ne, $nin só corresponde a documentos onde o campo existe e o valor não está no array.
QComo $nin corresponde a campos de array?
AEle corresponde quando qualquer elemento individual não está no array fornecido, não o array inteiro de uma vez.