faixa
Nesta página
Definição
range
O operador
range
tem 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).range
pode 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 |
---|---|---|---|
gt ou gte | Data, número ou string BSON, ou objectId | Localize valores maiores que (
| no |
lt ou lte | Data, número ou string BSON, ou objectId | Localize valores menores que (
| no |
path | cadeia de caracteres ou matriz de cadeias de caracteres | Campo ou campos indexados a serem pesquisados. Veja Construção de caminhos. | sim |
score | 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:
Quando você faz query de valores em arrays, o Atlas Search não altera a pontuação dos resultados correspondentes com base no número de valores dentro da array que correspondeu à query. A pontuação seria igual a uma única correspondência, independentemente do número de correspondências dentro de uma array. 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.
Dica
Se você já carregou o conjunto de dados de amostra, siga o tutorial Iniciar com Atlas Search para criar uma definição de índice e executar queries de Atlas Search.
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
title
eruntime
Adicione 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 abaixo usa o operador range
para fazer query de um campo de string na collection sample_mflix.movies
. Para este exemplo, você deve utilizar mapeamentos estáticos para indexar o campo denominado title
na collection como tipo Atlas Search token
.
Índice de amostra
A seguinte definição de índice denominada default
indexa o campo title
na collection movies
como tipo token
do Atlas Search:
{ "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' } ]