No MongoDB, o
$nin O operador de consulta seleciona os documentos onde o valor do campo não está na matriz especificada ou onde o campo não existe. Exemplo
Suponha que tenhamos uma coleção chamada
products com os seguintes documentos:{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } Podemos usar o
$nin operador para selecionar apenas os documentos que não possuem _id específico valores. Código de exemplo:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
}) Resultado:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } Nesse caso, queríamos apenas documentos que não conter um
_id valor de 1 , 2 , ou 3 . Exemplo 2
Aqui está outro exemplo. Desta vez usamos
$nin contra um campo diferente. db.products.find({
sizes: { $nin: [ "L" ] }
}) Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } Neste exemplo aplicamos
$nin para os sizes campo. Observe que o documento 6 foi retornado, embora não tenha
sizes campo. Isso é exatamente como esperado – se o campo não existir, ele será incluído no $nin resultados. A comparação de diferentes tipos é avaliada de acordo com a ordem de comparação BSON.
Exemplo de agregação
Podemos usar a mesma sintaxe ao usar o
$match operador de pipeline de agregação. Código de exemplo:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
) Resultado:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } E aqui está novamente ao consultar os
sizes campo:db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
) Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } Expressões regulares
Você pode usar expressões regulares na consulta usando o formulário
/pattern/ . Exemplo:
db.products.find({
sizes: { $nin: [ /^X/ ] }
}) Resultado:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } Neste exemplo, eu retorno todos os documentos que não possuem um
sizes campo que começa com X .