$in
Nesta página
$in
O operador
$in
seleciona os documentos nos quais o valor de um campo é igual a qualquer valor na array especificada.
Compatibilidade
Você pode utilizar o $in
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
Para especificar uma expressão $in
, use o seguinte protótipo:
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
Para comparação de diferentes valores dos tipos de BSON, consulte a ordem de comparação de BSON especificada.
Se field
contiver uma array, o operador $in
seleciona os documentos cujo field
inclui uma array que contém pelo menos um elemento que corresponde a um valor na array especificada (por exemplo, <value1>
, <value2>
e assim por diante).
O operador $in
compara cada parâmetro a cada documento na coleção, o que pode levar a problemas de desempenho. Para melhorar o desempenho:
- É recomendável limitar o número de parâmetros passados para
$in
operador para dezenas de valores. O uso de centenas de parâmetros ou mais pode impactar negativamente o desempenho da consulta.
Crie um índice no
field
em que você deseja fazer uma query.
Observação
Este documento descreve o operador de query $in
. Para a descrição do operador de agregação $in
, consulte $in (agregação).
Consultar dados no Atlas usando o Atlas Search
Para dados armazenados no MongoDB Atlas, você pode utilizar o Atlas Search no operador in quando executar queries $search
. O desempenho da execução de $in
após $search
é inferior ao da execução de $search
com o operador in.
Para saber mais sobre a versão do Atlas Search desse operador, consulte o operador in documentação do Atlas.
Exemplos
Crie a coleção inventory
:
db.inventory.insertMany( [ { "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] }, { "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] }, { "item": "Maps", "tags": [ "office", "storage" ] }, { "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] } ] )
Usar o operador $in
para corresponder valores
Considere o seguinte exemplo:
db.inventory.find( { quantity: { $in: [ 5, 15 ] } }, { _id: 0 } )
Esta query seleciona todos os documentos na coleção inventory
onde o valor do campo quantity
é 5 ou 15.
{ item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ] }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ] }
Embora você possa gravar esta query utilizando o operador $or
, utilize o operador $in
ao invés do operador $or
ao executar verificações de igualdade no mesmo campo.
Usar o operador $in
para corresponder valores em uma array
A operação updateMany()
a seguir define o campo exclude
como false
quando a array tags
tiver pelo menos um elemento que corresponda a "home"
ou "school"
.
db.inventory.updateMany( { tags: { $in: [ "home", "school" ] } }, { $set: { exclude: false } } )
Saída de exemplo:
{ item: 'Pens', quantity: 350, tags: [ 'school', 'office' ], exclude: false }, { item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ], exclude: false }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ], exclude: false }
Para obter exemplos adicionais sobre como consultar arrays, consulte:
Para obter exemplos adicionais sobre queries, consulte Fazer query em documentos
Usar o operador $in
com uma expressão regular
O operador $in
pode especificar valores correspondentes utilizando expressões comuns do formulário /pattern/
. Você não pode usar expressões do operador $regex
dentro de um $in
.
Considere o seguinte exemplo:
db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
Esta query seleciona todos os documentos na coleção inventory
em que o campo tags
contém uma string que começa com be
ou st
ou uma array com pelo menos um elemento que começa com be
ou st
.