Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / / /

faixa

Nesta página

  • Definição
  • Sintaxe
  • Opções
  • Exemplos
  • Exemplo de número
  • Exemplo de data
  • Exemplo de ObjectId
  • Exemplo de string
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:

  • número, incluindo int32, int64 e double

  • data

  • string, indexado como tipo de token de Pesquisa do Atlas

  • ObjectId

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}

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 (>) ou maiores ou iguais a (>=) em relação ao valor fornecido.

  • Para campos de número, o valor pode ser um tipo de dados int32, int64 ou double.

  • Para campos de data, o valor deve ser uma data formatada ISODate.

  • Para campos de string, o valor deve ser indexado como tipo Atlas Search token.

  • Para campos ObjectId, o valor deve ser indexado como tipo de dados objectId ou mapeamentos dinâmicos devem ser definidos como true.

no
lt ou lte
Data, número ou string BSON, ou objectId

Localize valores menores que (<) ou menores ou iguais a (<=) em relação ao valor fornecido.

  • Para campos de número, o valor pode ser um tipo de dados int32, int64 ou double.

  • Para campos de data, o valor deve ser uma data formatada ISODate.

  • Para campos de string, o valor deve ser indexado como tipo Atlas Search token.

  • Para campos ObjectId, o valor deve ser indexado como tipo de dados objectId ou mapeamentos dinâmicos devem ser definidos como true.

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:

  • boost: multiplique a pontuação do resultado pelo número fornecido.

  • constant: substitui a pontuação do resultado pelo número fornecido.

  • function: substitua a pontuação do resultado pela expressão fornecida.

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 score em sua consulta, consulte Classificar os documentos nos resultados.

no

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.

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.

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}

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.

1db.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.

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}

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 e runtime

  • Adicione um campo chamado score

1db.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.

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
}
}

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.

1db.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]

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.

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"
}
}
}
}

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.

1db.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]

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.

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"
}
}
}
}

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.

1db.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]

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.

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"
}
}
}
}

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.

1db.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' }
]

Voltar

String de query