$inO operador seleciona os documentos onde o valor de um campo é igual a qualquer valor na array
$inespecificada.
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 tem o seguinte $in 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, crie um índice no que field você deseja fazer a query. Um índice permite que o MongoDB crie limites para cada $in elemento e pesquise com mais eficiência.
Observação
Este documento descreve o $in operador de query. Para o $in operador de agregação do, consulte $in (operador de expressão ).
Consultar dados no Atlas usando o Atlas Search
Para dados armazenados no MongoDB Atlas, você pode usar o Atlas Search no operador Operator ao executar $search queries. Executar $in após tem menos $search $search desempenho do que executar 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 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, utilize o operador$inao invés do operador$orao 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 Ler 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 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.