$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 um array, o operador $in seleciona os documentos cujo field tem um array que contém pelo menos um elemento que corresponde a um valor no array especificado. Por exemplo, <value1>, <value2>, e assim por diante.
$in compara cada parâmetro a cada documento na coleção, o que pode causar problemas de desempenho. Para melhorar o desempenho:
Limite o número de parâmetros passados para
$inpara dezenas de valores. O uso de centenas de parâmetros pode ter um impacto negativo no desempenho da query.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 MongoDB Search
Para dados armazenados no MongoDB Atlas, você pode usar o operador MongoDB Search in Operator ao executar queries$search. Executar $in após $search é menos eficiente que executar $search com o operador In Operator.
Para saber mais sobre a versão do MongoDB Search desse operador, consulte o operador In Operator na documentação do Atlas.
Exemplos
Para criar a coleção 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 coleção 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, use o operador $in ao invés do operador $or ao executar verificações de igualdade no mesmo campo.
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
Use $in com uma expressão regular
O operador $in pode selecionar documentos usando expressões regulares do formato /pattern/. Você não pode usar $regex expressões dentro de $in.
Esta query seleciona documentos na coleção inventory em que o campo tags começa com be ou st:
db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
A 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.