$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
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
$inoperador para dezenas de valores. O uso de centenas de parâmetros ou mais pode impactar negativamente o desempenho da consulta.
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
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.