Em
Definição
O operador in
executa um Atlas Search para uma array de valores BSON 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 mais informações,consulte Construir um caminho de query. Para pesquisar valores de string em um campo, você deve indexar o campo como o tipo token do Atlas 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 |
| Obrigatório |
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 do Atlas e criar um índice do Atlas Search 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
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 Atlas Search, consulte Criar um índice do Atlas Search.
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 ]
Atlas Search retorna dois documento 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 ]
O Atlas Search 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 ]
O Atlas Search retorna documentos que contêm James Sanchez
e Jennifer Lawrence
no campo name
. O Atlas Search pontua o documento que contém name: 'James Sanchez'
mais alto porque corresponde ao ObjectId
especificado na cláusula should
.