Definição
The in operator in MongoDB Search performs a search for an array of BSON number, date, boolean, objectId, uuid, or string values at the given path and returns documents where the value of the field equals any value in the specified array. If the field holds an array, then the in operator selects the documents whose field holds an array that contains at least one element that matches any value in the specified array.
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
The following examples use the in operator to query collections in the sample_analytics.customers collection. If you load the sample data on your cluster and create a MongoDB Search index named default that uses static mappings on the collection, you can run the following queries against the collections.
Í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
The following query uses the in operator to search the birthdate field, which contains a single value, for customers who were born on given dates. The query uses the $project stage to:
Omita o campo
_idnos resultados.Inclua apenas os campos
nameebirthdatenos 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.
The following query uses the in operator to query the accounts field, which contains an array of numbers, for customers with account numbers 371138, 371139, or 371140. The query uses the $project stage to:
Omita o campo
_idnos resultados.Inclua apenas os campos
nameeaccountsnos 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.
The following query uses the text operator to query for customers whose first name is James in the name field. The query specifies preference using the in operator for customers associated with the given objectIds in the _id field. The query uses $limit stage to limit the output to 5 results and the $project stage to:
Inclua apenas os campos
_idenamenos resultados.Adicione um campo denominado
scoreaos 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') } ] } } } ]