No MongoDB, o
$in
O operador de consulta seleciona os documentos em que o valor de um campo é igual a qualquer valor na matriz especificada. O
$in
operador de consulta não deve ser confundido com o $in
operador de pipeline de agregação, que retorna um booleano indicando se um valor especificado está na matriz. Exemplo
Suponha que tenhamos uma coleção chamada
products
com os seguintes documentos:{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 4, "prod" : "Shirt", "sizes" : "M" } { "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Podemos usar o
$in
operador para selecionar apenas os documentos com _id
específico valores. Código de exemplo:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
})
Resultado:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Nesse caso, queremos apenas documentos que contenham um
_id
valor de 1
, 2
, ou 3
. Exemplo 2
Aqui está outro exemplo. Desta vez usamos
$in
contra um campo diferente. db.products.find({
sizes: { $in: [ "L" ] }
})
Resultado:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Neste exemplo aplicamos
$in
para os sizes
campo. Nesse caso, o primeiro documento tinha o valor como uma string, enquanto os outros dois documentos o tinham como um elemento de array. De qualquer forma, todos os documentos correspondentes foram devolvidos.
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: { $in: [ 1, 2, 3 ] } } }
]
)
Resultado:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
E aqui está novamente ao consultar os
sizes
campo:db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
)
Resultado:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Expressões regulares
Você pode usar expressões regulares na consulta usando o formulário
/pattern/
. Exemplo:
db.products.find({
sizes: { $in: [ /^X/ ] }
})
Resultado:
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Neste exemplo, eu retorno todos os documentos que possuem um
sizes
campo com um valor que é uma string que começa com X
ou uma matriz onde pelo menos um dos elementos começa com X
.