$nin$ninseleciona os documentos em que: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 tiver uma array, o operador $nin seleciona os documentos cujo field tem 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
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.
Selecionar em documentos não correspondentes)
O exemplo a seguir retorna filmes em que runtime é maior que 1000 minutos e rated não está em [ "G", "PG" ]. Como $nin também corresponde a documentos que não contêm o campo rated, a query retorna filmes mesmo quando os dados de classificação não estão disponíveis:
db.movies.find( { rated: { $nin: [ "G", "PG" ] }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, year: 1, rated: 1 } )
[ { title: 'Centennial', year: 1978 }, { title: 'Baseball', year: 1994, rated: 'TV-PG' } ]
Selecionar os elementos que não estão em uma array
O exemplo a seguir define o campo exclude como true para filmes que não têm "Drama" em sua array genres:
db.movies.updateMany( { genres: { $nin: [ "Drama" ] } }, { $set: { exclude: true } } )
{ acknowledged: true, insertedId: null, matchedCount: ..., modifiedCount: ..., upsertedCount: 0 }
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 collection. Consulte também Criar queries seletivas.