$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: The fully managed service for MongoDB deployments in the cloud
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
The $nin operator has the following form:
{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }
Comportamento
Type Bracketing
Ao contrário dos operador de desigualdade ($gt, $gte, $lt e $lte), $nin não usa colchetes de tipo. Em vez disso, ele corresponde a documento onde o valor do campo não é um dos valores especificados, independentemente do tipo do valor.
Por exemplo, { a: { $nin: [ 2, 4 ] } } também corresponde a documento onde a é uma string.
Corresponder um valor de array
If field has an array, the $nin operator selects the documents whose field has an array with no element equal to a value in the specified array. For example, <value1>, <value2>, and so on.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação 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 } )
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 } } )
updateMany() also selects a document when the document does not contain the field $nin is matching on.
The inequality operator $nin is not very selective since it often matches a large portion of the index. As a result, in many cases, a $nin query with an index may perform no better than a $nin query that must scan all documents in a collection. See also Create Selective Queries.