Definição
O operador in
na MongoDB Search executa uma pesquisa por uma array de BSON valores number
, date
, boolean
, objectId
, uuid
ou string
no caminho fornecido e retorna documentos onde 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 contenha pelo menos um elemento que corresponda 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> } } }
Campos
Campo | Tipo | Descrição | necessidade |
---|---|---|---|
| string | Campo indexado para pesquisar. Você também pode especificar um caminho curinga para pesquisar. Para pesquisar valores destring em um campo, você deve indexar o campo como o tipo de token 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 |
Exemplos
Os exemplos seguintes utilizam o operador in
para consultar collections na collection sample_analytics.customers. Se você carregar os dados de amostra em seu cluster e criar um índice do MongoDB Search chamado default
que usa 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
name
como 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
_id
nos resultados.Inclua apenas os campos
name
ebirthdate
nos resultados.
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "in": { 5 "path": "birthdate", 6 "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")] 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "name": 1, 14 "birthdate": 1 15 } 16 } 17 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 birthdate: ISODate("1977-03-02T02:20:31.000Z") 5 }, 6 { 7 name: 'Brad Cardenas', 8 birthdate: ISODate("1977-05-06T21:57:35.000Z") 9 } 10 ]
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
_id
nos resultados.Inclua apenas os campos
name
eaccounts
nos resultados.
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "in": { 5 "path": "accounts", 6 "value": [371138, 371139, 371140] 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "name": 1, 14 "accounts": 1 15 } 16 } 17 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 } 6 ]
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
_id
ename
nos resultados.Adicione um campo denominado
score
aos resultados.
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "must": [{ 6 "in": { 7 "path": "name", 8 "value": ["james sanchez", "jennifer lawrence"] 9 } 10 }], 11 "should": [{ 12 "in": { 13 "path": "_id", 14 "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")] 15 } 16 }] 17 } 18 } 19 }, 20 { 21 "$limit": 5 22 }, 23 { 24 "$project": { 25 "_id": 1, 26 "name": 1, 27 "score": { $meta: "searchScore" } 28 } 29 } 30 ])
1 [ 2 { 3 _id: ObjectId("5ca4bbcea2dd94ee58162a72"), 4 name: 'James Sanchez', 5 score: 2 6 }, 7 { 8 _id: ObjectId("5ca4bbcea2dd94ee58162a71"), 9 name: 'Jennifer Lawrence', 10 score: 1 11 } 12 ]
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
1 db.customers.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "in": { 7 "path": "active", 8 "value": null 9 } 10 }, 11 "facets": { 12 "birthdateFacet": { 13 "type": "date", 14 "path": "birthdate", 15 "boundaries": [ISODate("1970-01-01"), ISODate("1980-01-01"), ISODate("1990-01-01"), ISODate("2000-01-01")], 16 "default": "other" 17 } 18 } 19 } 20 } 21 } 22 ])
[ { 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') } ] } } } ]