Definição
O operador in no MongoDB Search realiza uma pesquisa por uma array de valores BSON number, date, boolean, objectId, uuid ou string no caminho fornecido e retorna documentos em que o valor do campo é igual a qualquer valor na array especificada. Se o campo contiver uma array, o operador in selecionará os documentos cujo campo contém uma array que contém pelo menos um elemento que corresponde a qualquer valor na array especificada.
Sintaxe
O operador in tem a seguinte sintaxe:
{ $search: { "index": <index name>, // optional, defaults to "default" "in": { "path": "<field-to-search>", "score": <options>, "value": <single-or-array-of-values-to-search>, "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>] } }}Campos
Campo | Tipo | Descrição | necessidade |
|---|---|---|---|
| cadeia de caracteres ou matriz de cadeias de caracteres | Campos indexados a serem pesquisados. Você também pode especificar um caminho curinga para pesquisar. Para pesquisar valores de string em um campo, você deve indexar o campo como o tipo de token do MongoDB Search. | Obrigatório |
| objeto | Pontuação para atribuir aos resultados do termo de pesquisa correspondente. Use uma das opções seguintes para modificar a pontuação:
| Opcional |
| Valor ou valores a serem pesquisados. O valor pode ser um único valor ou uma array de valores de apenas um dos tipos de BSON suportados e não pode ser uma mistura de tipos diferentes. Para pesquisar valores de string em um campo, você deve indexar o campo como o tipo de token do MongoDB Search. | Obrigatório | |
| cadeia de caracteres ou matriz de cadeias de caracteres | Faceta ou lista de facetas a serem excluídos do novo cálculo de contagem com base nesta query. O valor deve ser um ou mais nomes de uma faceta definidos em | Opcional |
Exemplos
Os exemplos a seguir usam o operador in para consultar coleções na coleção sample_analytics.customers. Se você carregar os dados de amostra em seu cluster e criar um índice de pesquisa do MongoDB chamado default que use mapeamentos estáticos na coleção, poderá executar as seguintes queries nas coleções.
Índice de amostra
A definição do índice de amostra especifica as seguintes ações para oferecer suporte às consultas do operador in nos campos indexados na coleção:
Indexe automaticamente todos os campos dinamicamente indexáveis na coleção.
Indexe estaticamente o campo
namecomo o tipo de token e converte o texto no campo em letras minúsculas.
{ "mappings": { "index": "default", "dynamic": true, "fields": { "name": { "normalizer": "lowercase", "type": "token" } } }}Para saber como criar um índice do MongoDB Search, consulte Gerenciar índices de pesquisa do MongoDB.
Exemplos de queries
A query a seguir usa o operador in para o Atlas Search para o campo birthdate, que contém um único valor, para clientes que nasceram em determinadas datas. A consulta utiliza o estágio $project para:
Omita o campo
_idnos resultados.Inclua apenas os campos
nameebirthdatenos resultados.
db.customers.aggregate([ { "$search": { "in": { "path": "birthdate", "value": [ISODate("1977-03-02T02:20:31.000+00:00"), ISODate("1977-03-01T00:00:00.000+00:00"), ISODate("1977-05-06T21:57:35.000+00:00")] } } }, { "$project": { "_id": 0, "name": 1, "birthdate": 1 } }])[ { name: 'Elizabeth Ray', birthdate: ISODate("1977-03-02T02:20:31.000Z") }, { name: 'Brad Cardenas', birthdate: ISODate("1977-05-06T21:57:35.000Z") }]A pesquisa do MongoDB retorna dois documentos que correspondem às datas especificadas na query.
A query a seguir usa o operador in para consultar o campo accounts , que contém uma array de números, para clientes com números de conta 371138, 371139 ou 371140. A consulta utiliza o estágio $project para:
Omita o campo
_idnos resultados.Inclua apenas os campos
nameeaccountsnos resultados.
db.customers.aggregate([ { "$search": { "in": { "path": "accounts", "value": [371138, 371139, 371140] } } }, { "$project": { "_id": 0, "name": 1, "accounts": 1 } }])[ { name: 'Elizabeth Ray', accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] }]A Pesquisa do MongoDB retorna apenas um documento que corresponde ao número de conta 371138 especificado na query.
A query seguinte usa o operador text para consultar os clientes cujo nome é James no campo name . A query especifica a preferência utilizando o operador in para clientes associados com os objectIds fornecidos no campo _id . A query usa o estágio $limit para limitar a saída a 5 resultados, e o estágio $project para:
Inclua apenas os campos
_idenamenos resultados.Adicione um campo denominado
scoreaos resultados.
db.customers.aggregate([ { "$search": { "compound": { "must": [{ "in": { "path": "name", "value": ["james sanchez", "jennifer lawrence"] } }], "should": [{ "in": { "path": "_id", "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")] } }] } } }, { "$limit": 5 }, { "$project": { "_id": 1, "name": 1, "score": { $meta: "searchScore" } } }])[ { _id: ObjectId("5ca4bbcea2dd94ee58162a72"), name: 'James Sanchez', score: 2 }, { _id: ObjectId("5ca4bbcea2dd94ee58162a71"), name: 'Jennifer Lawrence', score: 1 }]A Pesquisa do MongoDB retorna documentos que contêm James Sanchez e Jennifer Lawrence no campo name. O MongoDB Search pontua o documento que contém name: 'James Sanchez' mais alto porque corresponde ao ObjectId especificado na cláusula should.
Consulta de faceta
A seguinte query usa o operador in para pesquisar no campo active, que contém um valor booleano, para clientes que estão ativos. A query retorna o número de clientes ativos cuja data de nascimento cai nos seguintes intervalos:
1970–01–01, incluindo o limite inferior para este bucket
1980-01-01, limite superior exclusivo para o bucket 1970-01-01 e limite inferior inclusivo para este bucket
1990-01-01, limite superior exclusivo para o bucket 1980-01-01 e limite inferior inclusivo para este bucket
2000-01-01, limite superior exclusivo para o bucket 1990-01-01
db.customers.aggregate([ { "$searchMeta": { "facet": { "operator": { "in": { "path": "active", "value": null } }, "facets": { "birthdateFacet": { "type": "date", "path": "birthdate", "boundaries": [ISODate("1970-01-01"), ISODate("1980-01-01"), ISODate("1990-01-01"), ISODate("2000-01-01")], "default": "other" } } } } }])[ { count: { lowerBound: Long('1') }, facet: { birthdateFacet: { buckets: [ { _id: ISODate('1970-01-01T00:00:00.000Z'), count: Long('1') }, { _id: ISODate('1980-01-01T00:00:00.000Z'), count: Long('0') }, { _id: ISODate('1990-01-01T00:00:00.000Z'), count: Long('0') } ] } } }]