Definição
rangeO operador
rangetem suporte para queries e pontuação de valores numéricos, de data e string. Você pode usar esse operador para localizar resultados que estejam dentro de um determinado intervalo numérico, de data, objectId ou letra (do alfabeto em inglês).rangepode fazer queries dos seguintes tipos de dados:
Sintaxe
range tem a seguinte sintaxe:
1 { 2 "$search": { 3 "index": <index name>, // optional, defaults to "default" 4 "range": { 5 "path": "<field-to-search>", 6 "gt | gte": <value-to-search>, 7 "lt | lte": <value-to-search>, 8 "score": <score-options> 9 } 10 } 11 }
Opções
range usa os seguintes termos para construir uma consulta:
Campo | Tipo | Descrição | necessidade |
|---|---|---|---|
| Data, número ou string BSON, ou objectId | Localize valores maiores que (
| no |
| Data, número ou string BSON, ou objectId | Localize valores menores que (
| no |
| cadeia de caracteres ou matriz de cadeias de caracteres | Campos indexados a serem pesquisados. | sim |
| objeto | Modifique a pontuação atribuída aos resultados de pesquisa correspondentes. Você pode modificar a pontuação padrão usando as seguintes opções:
Ao executar query de valores de array, o MongoDB Search atribui a mesma pontuação, independentemente de quantos valores na array correspondem à query. Para obter informações sobre como utilizar o | no |
Exemplos
Os exemplos abaixo usam a collection nos dados de amostra. Se você carregou os dados de amostra no cluster, poderá criar os índices usando as definições de índice nos exemplos abaixo e executar as queries de exemplo no cluster.
Exemplo de número
Os exemplos a seguir usam índices em campos numéricos nos dados de amostra e executam queries range nos campos indexados.
Para este exemplo, você pode utilizar mapeamentos estáticos ou dinâmicos para indexar o campo runtime na collection sample_mflix.movies. A query utiliza campos gte e lte para definir a faixa numérica para pesquisar.
Índice de amostra
A definição de índice a seguir, chamada default , indexa todos os campos na coleção movies .
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
A seguinte definição de índice denominada default indexa o campo runtime somente na coleção movies.
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
Amostra de query
A seguinte query pesquisa filmes com um tempo de duração maior ou igual a 2, e menor ou igual a 3. Inclui um estágio $limit para limitar a saída a 5 resultados e um estágio $project para excluir todos os campos, exceto title e runtime.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "gte": 2, 7 "lte": 3 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "runtime": 1 19 } 20 } 21 ])
{ "runtime" : 3, "title" : "Dots" } { "runtime" : 3, "title" : "Sisyphus" } { "runtime" : 3, "title" : "The Fly" } { "runtime" : 2, "title" : "Andrè and Wally B." } { "runtime" : 2, "title" : "Luxo Jr." }
Para este exemplo, você pode utilizar mapeamentos estáticos ou dinâmicos para indexar o campo runtime na coleção sample_mflix.movies. A query usa o campo lte para pesquisar todos os valores menores ou iguais ao valor fornecido.
Índice de amostra
A seguinte definição de índice denominada default indexa o campo runtime na coleção movies .
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
Amostra de query
A seguinte query pesquisa todos os filmes com um tempo de duração menor ou igual a 2. Inclui um estágio $limit para limitar o resultado para 5 resultados e estágio $project para:
Excluir todos os campos, exceto
titleeruntimeAdicione um campo chamado
score
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "lte": 2 7 } 8 } 9 }, 10 { 11 "$limit": 5 12 }, 13 { 14 "$project": { 15 "_id": 0, 16 "title": 1, 17 "runtime": 1, 18 score: { $meta: "searchScore" } 19 } 20 } 21 ])
{ "runtime" : 1, "title" : "Blacksmith Scene", "score" : 1 } { "runtime" : 2, "title" : "Andrè and Wally B.", "score" : 1 } { "runtime" : 2, "title" : "Luxo Jr.", "score" : 1 } { "runtime" : 1, "title" : "The Kiss", "score" : 1 } { "runtime" : 1, "title" : "Dickson Experimental Sound Film", "score" : 1 }
O exemplo a seguir indexa dinamicamente todos os campos indexáveis dinamicamente, incluindo campos com array de valores numéricos, na collection sample_analytics.customers . A query de exemplo usa os campos gte e lte para o Atlas Search de todos os valores entre os valores fornecidos em uma array de valores numéricos.
Índice de amostra
A seguinte definição de índice denominada default indexa dinamicamente todos os campos, incluindo o campo accounts , que é uma array de valores numéricos.
{ "mappings": { "dynamic": true } }
Amostra de query
A seguinte query pesquisa contas de cliente entre 250000 e 300000. Inclui um estágio $limit para limitar o resultado para 5 resultados e um estágio $project para excluir todos os campos, exceto accounts e name.
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "accounts", 6 "gt": 250000, 7 "lt": 400000 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "accounts": 1, 18 "name": 1 19 } 20 } 21 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 }, 6 { 7 name: 'Katherine David', 8 accounts: [ 462501, 228290, 968786, 515844, 377292 ] 9 }, 10 { 11 name: 'Brad Cardenas', 12 accounts: [ 721914, 817222, 973067, 260799, 87389 ] 13 }, 14 { 15 name: 'Gary Nichols', 16 accounts: [ 385397, 337979, 325377, 440243, 586395, 86702 ] 17 }, 18 { name: 'Jennifer Lawrence', accounts: [ 344885, 839927, 853542 ] } 19 ]
Exemplo de data
O exemplo seguinte utiliza o operador range para fazer uma query de um campo de data na collection sample_mflix.movies. Neste exemplo, você pode utilizar mapeamentos estáticos ou dinâmicos para indexar o campo do tipo date denominado released na collection.
Índice de amostra
A seguinte definição de índice denominada default indexa todos os campos dinamicamente indexáveis na collection movies, incluindo o campo released, que é do tipo date.
{ "mappings": { "dynamic": true } }
A seguinte definição de índice denominada default indexa o campo released na coleção movies :
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
Amostra de query
A consulta a seguir pesquisa filmes lançados entre 1 de janeiro de 2010 e 1 de janeiro de 2015. Ela inclui um estágio $limit para limitar a saída a 5 resultados e um estágio $project para excluir todos os campos, exceto title e released.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "released", 6 "gt": ISODate("2010-01-01T00:00:00.000Z"), 7 "lt": ISODate("2015-01-01T00:00:00.000Z") 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "released": 1 19 } 20 } 21 ])
1 [ 2 { 3 title: 'Too Much Johnson', 4 released: ISODate('2014-08-30T00:00:00.000Z') 5 }, 6 { 7 title: 'Stolen Desire', 8 released: ISODate('2012-07-01T00:00:00.000Z') 9 }, 10 { 11 title: 'The Monkey King', 12 released: ISODate('2012-01-12T00:00:00.000Z') 13 }, 14 { title: 'The Land', released: ISODate('2012-08-04T00:00:00.000Z') }, 15 { 16 title: 'My Childhood', 17 released: ISODate('2013-07-31T00:00:00.000Z') 18 } 19 ]
Exemplo de ObjectId
O exemplo a seguir usa o operador range para consultar um campo objectId na coleção sample_mflix.movies . Neste exemplo, você pode utilizar mapeamentos estáticos ou dinâmicos para indexar o campo do tipo objectId denominado _id na coleção.
Índice de amostra
A definição de índice a seguir, chamada default , indexa todos os campos na coleção movies .
A seguinte definição de índice denominada default indexa todos os campos dinamicamente indexáveis na collection movies, incluindo o campo _id, que é do tipo objectId.
{ "mappings": { "dynamic": true } }
A seguinte definição de índice denominada default indexa o campo _id na coleção movies :
{ "mappings": { "dynamic": false, "fields": { "_id": { "type": "objectId" } } } }
Amostra de query
O exemplo a seguir usa o operador range para fazer query no campo _id para um intervalo de valores objectId na coleção sample_mflix.movies.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "_id", 6 "gte": ObjectId("573a1396f29313caabce4a9a"), 7 "lte": ObjectId('573a1396f29313caabce4ae7') 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "title": 1, 15 "released": 1 16 } 17 } 18 ])
1 [ 2 { 3 _id: ObjectId('573a1396f29313caabce4a9a'), 4 title: 'The Godfather', 5 released: ISODate('1972-03-24T00:00:00.000Z') 6 }, 7 { 8 _id: ObjectId('573a1396f29313caabce4a9b'), 9 title: 'Get to Know Your Rabbit', 10 released: ISODate('1972-06-01T00:00:00.000Z') 11 }, 12 { 13 _id: ObjectId('573a1396f29313caabce4aad'), 14 title: 'The Tall Blond Man with One Black Shoe', 15 released: ISODate('1973-08-30T00:00:00.000Z') 16 }, 17 { 18 _id: ObjectId('573a1396f29313caabce4abe'), 19 title: 'The Great Northfield Minnesota Raid', 20 released: ISODate('1972-05-12T00:00:00.000Z') 21 }, 22 { 23 _id: ObjectId('573a1396f29313caabce4ac4'), 24 title: 'The Heartbreak Kid', 25 released: ISODate('1973-02-01T00:00:00.000Z') 26 }, 27 { 28 _id: ObjectId('573a1396f29313caabce4ac7'), 29 title: 'Gumshoe', 30 released: ISODate('1971-12-01T00:00:00.000Z') 31 }, 32 { 33 _id: ObjectId('573a1396f29313caabce4ad9'), 34 title: 'Heat', 35 released: ISODate('1972-10-06T00:00:00.000Z') 36 }, 37 { 38 _id: ObjectId('573a1396f29313caabce4ae7'), 39 title: 'Horror Express', 40 released: ISODate('1973-12-01T00:00:00.000Z') 41 } 42 ]
Exemplo de string
O exemplo seguinte utiliza o operador range para consultar um campo de string na coleção sample_mflix.movies. Neste exemplo, você deve usar mapeamentos estáticos para indexar o campo chamado title na collection como tipo token do MongoDB Search.
Índice de amostra
A seguinte definição de índice denominada default indexa o campo title na collection movies como tipo MongoDB Search token:
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "token", "normalizer": "lowercase" } } } }
Amostra de query
A query a seguir pesquisa títulos de filmes que contenham caracteres entre city e country. Ela inclui um estágio $limit para limitar a saída a 5 resultados e um estágio $project para excluir todos os campos, exceto title.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "title", 6 "gt": "city", 7 "lt": "country" 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1 18 } 19 } 20 ])
[ { title: 'Civilization' }, { title: 'Clash of the Wolves' }, { title: 'City Lights' }, { title: 'Comradeship' }, { title: 'Come and Get It' } ]
Exemplo de documentos incorporados
A query a funding_rounds.raised_amount seguir pesquisa no campo na sample_training.companies collection uma quantidade maior ou igual a 500000 e menor ou igual 1000000 a. Ele usa returnStoredSource: true e returnScope para recuperar e retornar os campos dentro da funding_rounds array de objetos, que são armazenados mongot em. A consulta utiliza o índice de amostra do exemplo Utilizar Caminho Relativo para Origem Armazenada.
➤ Tente fazer isso no Search Playground. Os resultados no MongoDB Search Playground podem variar porque os dados no MongoDB Search Playground são menores do que a coleção de amostra usada no exemplo a seguir .
1 db.companies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "funding_rounds.raised_amount", 6 "gte": 500000, 7 "lte": 1000000 8 }, 9 "returnStoredSource": true, 10 "returnScope": { 11 "path": "funding_rounds" 12 } 13 } 14 }, 15 { 16 "$limit": 5 17 } 18 ])
[ { round_code: 'angel', raised_amount: 500000, raised_currency_code: 'USD' }, { round_code: 'angel', raised_amount: 800000, raised_currency_code: 'USD' }, { round_code: 'c', raised_amount: 1000000, raised_currency_code: 'USD' }, { round_code: 'seed', raised_amount: 1000000, raised_currency_code: 'USD' }, { round_code: 'a', raised_amount: 1000000, raised_currency_code: 'USD' } ]
Exemplo de metadados
A seguinte query pesquisa filmes com um tempo de duração maior ou igual a 2, e menor ou igual a 3. A query usa o estágio $searchMeta para recuperar todos os filmes nos seguintes intervalos de anos que atendem aos critérios de pesquisa:
1990, limite inferior inclusivo para este bucket
2000, limite superior exclusivo para o bucket 1990 e limite inferior inclusivo para esse bucket
2010, limite superior exclusivo para o bucket 2000 e limite inferior inclusivo para esse bucket
2020, limite superior exclusivo para o bucket 2010
A consulta usa um índice chamado default que indexa dinamicamente todos os campos no namespace sample_mflix.movies .
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "runtime", "gte": 2, "lte": 3 } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1990, 2000, 2010, 2020 ] } } } } } ])
[ { count: { lowerBound: Long('15') }, facet: { yearFacet: { buckets: [ { _id: 1990, count: Long('2') }, { _id: 2000, count: Long('3') }, { _id: 2010, count: Long('5') } ] } } } ]