$inO operador
$inseleciona 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
O operador $in tem o seguinte formato:
{ 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 tiver uma array, o operador seleciona os documentos $in cujo field tem 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.
$in compara cada parâmetro a cada documento na collection, o que pode causar problemas de desempenho. Para melhorar o desempenho:
Limite o número de parâmetros passados para para dezenas de valores. O uso de centenas de parâmetros pode impacto negativamente o desempenho da
$inconsulta.Crie um índice no
fieldem que você deseja fazer uma query.
Observação
Este documento descreve o operador de query $in. Para o operador de agregação $in, consulte $in (operador de expressão).
Consultar dados no Atlas usando o Atlas Search
Para dados armazenados no MongoDB Atlas, você pode utilizar o operador in Operator do Atlas Search ao executar queries $search. O desempenho da execução de $in após $search é inferior ao da execução de $search com o operador in Operator.
Para saber mais sobre a versão do Atlas Search desse operador, consulte o operador In Operator na documentação do Atlas.
Exemplos
Para criar a collection inventory usada nos exemplos, execute:
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" ] } ] )
Match Values
Esta query seleciona documentos na collection inventory em que o valor do campo quantity é 5 ou 15:
db.inventory.find( { quantity: { $in: [ 5, 15 ] } }, { _id: 0 } )
A saída:
{ item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ] }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ] }
Embora você possa escrever a query utilizando o operador$or, utilize o operador$inao invés do operador$orao executar verificações de igualdade no mesmo campo.
Combinar valores em uma array
A operação a seguir updateMany() define o exclude campo como false quando a tags array tiver pelo menos um elemento que corresponda "home" a "school" ou:
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
Use $in com uma expressão regular
O operador pode selecionar documentos utilizando expressões regulares $in do /pattern/ formato. Você não pode usar expressões $regex dentro $in de.
Esta query seleciona documentos na collection inventory onde o campo tags começa com be ou st:
db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
A query seleciona todos os documentos na collection inventory onde o campo tags tem uma string que começa com be ou st ou uma array com pelo menos um elemento que começa com be ou st.