Docs Menu
Docs Home
/ /

range (Operador de búsqueda de MongoDB)

range

El operador range permite consultar y puntuar valores numéricos, de fecha y de cadena. Puede usarlo para buscar resultados dentro de un rango numérico, de fecha, de objectId o de letras (del alfabeto inglés).

range Admite la consulta de los siguientes tipos de datos:

  • número, int32int64incluidos, y double

  • fecha

  • cadena, indexada como tipo de token de búsqueda de MongoDB

  • ObjectId

range tiene la siguiente sintaxis:

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 utiliza los siguientes términos para construir una consulta:

Campo
Tipo
Descripción
Necesidad

gt or gte

Fecha, número, cadena u objectId de BSON

Encuentre valores mayores que (>) o mayores o iguales que (>=) el valor dado.

  • Para los campos numéricos, el valor puede ser un tipo de datos int32, int64 o double.

  • Para los campos de fecha, el valor debe ser un Fecha con formato ISODate.

  • Para los campos de cadena, el valor debe indexarse ​​como tipo MongoDB Search token.

  • Para ObjectId los campos, el valor debe indexarse ​​como tipo de datos objectId o las asignaciones dinámicas deben establecerse true en.

no

lt or lte

Fecha, número, cadena u objectId de BSON

Encuentre valores menores que (<) o menores o iguales que (<=) el valor dado.

  • Para los campos numéricos, el valor puede ser un tipo de datos int32, int64 o double.

  • Para los campos de fecha, el valor debe ser una fecha con formato ISODate.

  • Para los campos de cadena, el valor debe indexarse ​​como tipo MongoDB Search token.

  • Para ObjectId los campos, el valor debe indexarse ​​como tipo de datos objectId o las asignaciones dinámicas deben establecerse true en.

no

path

cadena o matriz de cadenas

Campo o campos indexados para buscar.

score

Objeto

Modifique la puntuación asignada a los resultados de búsqueda coincidentes. Puede modificar la puntuación predeterminada con las siguientes opciones:

  • boost:multiplica la puntuación del resultado por el número dado.

  • constant:reemplace la puntuación del resultado con el número dado.

  • function:reemplace la puntuación del resultado con la expresión dada.

Al consultar valores de una matriz, MongoDB Search asigna puntuaciones más altas si más valores en la matriz coinciden con la consulta.

Para obtener información sobre el uso de score en su consulta,consulte Calificar los documentos en los resultados.

no

Los siguientes ejemplos utilizan la colección de datos de ejemplo. Si cargó los datos de ejemplo en su clúster, puede crear los índices utilizando las definiciones de índice de los ejemplos a continuación y ejecutar las consultas de ejemplo en su clúster.

Los siguientes ejemplos utilizan índices en campos numéricos en los datos de muestra y ejecutan range consultas contra los campos indexados.

En este ejemplo, puede usar asignaciones estáticas o dinámicas para indexar el campo runtime en la colección sample_mflix.movies. La consulta utiliza los campos gte y lte para definir el rango numérico de búsqueda.

La siguiente definición de índice denominada default indexa todos los campos de la colección movies.

1{
2 "mappings": {
3 "dynamic": true
4 }
5}

La siguiente definición de índice denominada default indexa el campo runtime solo en la colección movies.

1{
2 "mappings": {
3 "dynamic": false,
4 "fields": {
5 "runtime": {
6 "type": "number"
7 }
8 }
9 }
10}

La siguiente consulta busca películas con una duración mayor o igual a 2 y menor o igual 3 a. Incluye una etapa para limitar la salida $limit a 5 resultados y una etapa para excluir todos los campos $project excepto title runtimey.

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

En este ejemplo, puede usar asignaciones estáticas o dinámicas para indexar el campo runtime en la colección sample_mflix.movies. La consulta usa el campo lte para buscar todos los valores menores o iguales al valor dado.

La siguiente definición de índice denominada default indexa el campo runtime en la colección 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}

La siguiente consulta busca todas las películas con una duración menor o igual 2 a. Incluye una $limit etapa para limitar la salida a 5 resultados y una $project etapa para:

  • Excluir todos los campos excepto title y runtime

  • Agregue un campo llamado 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 }

El siguiente ejemplo indexa dinámicamente todos los campos indexables dinámicamente, incluidos los campos con una matriz de valores numéricos, en la colección sample_analytics.customers. La consulta de ejemplo utiliza los campos gte y lte para buscar todos los valores entre los valores dados en una matriz de valores numéricos.

La siguiente definición de índice denominada default indexa dinámicamente todos los campos, incluido el campo accounts, que es una matriz de valores numéricos.

{
"mappings": {
"dynamic": true
}
}

La siguiente query busca cuentas de clientes entre 250000 y 300000. Incluye una etapa $limit para limitar la salida a 5 resultados y una etapa $project para excluir todos los campos, excepto accounts y 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]

El siguiente ejemplo utiliza el operador range para consultar un campo de fecha de la colección sample_mflix.movies. En este ejemplo, puede usar asignaciones estáticas o dinámicas para indexar el campo de tipo date llamado released en la colección.

La siguiente definición de índice denominada default indexa todos los campos indexables dinámicamente en la colección movies, incluido el campo released, que es de tipo date.

{
"mappings": {
"dynamic": true
}
}

La siguiente definición de índice denominada default indexa el campo released en la colección movies:

{
"mappings": {
"dynamic": false,
"fields": {
"released": {
"type": "date"
}
}
}
}

La siguiente consulta busca películas estrenadas entre el de enero 1 de2010 y el de enero 1 2015de. Incluye una etapa para limitar la salida $limit a 5 resultados y una etapa para excluir todos los campos $project excepto title releasedy.

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]

El siguiente ejemplo utiliza el operador range para consultar un campo objectId de la colección sample_mflix.movies. En este ejemplo, puede usar asignaciones estáticas o dinámicas para indexar el campo de tipo objectId llamado _id en la colección.

La siguiente definición de índice denominada default indexa todos los campos de la colección movies.

La siguiente definición de índice denominada default indexa todos los campos indexables dinámicamente en la colección movies, incluido el campo _id, que es de tipo objectId.

{
"mappings": {
"dynamic": true
}
}

La siguiente definición de índice denominada default indexa el campo _id en la colección movies:

{
"mappings": {
"dynamic": false,
"fields": {
"_id": {
"type": "objectId"
}
}
}
}

El siguiente ejemplo utiliza el operador range para consultar el campo _id para un rango de objectId valores en la colección 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]

El siguiente ejemplo utiliza el operador range para consultar un campo de cadena en la colección sample_mflix.movies. En este ejemplo, debe usar asignaciones estáticas para indexar el campo title en la colección como tipo token de MongoDB Search.

La siguiente definición de índice denominada default indexa el campo title en la colección movies como tipo MongoDB Search token:

{
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "token",
"normalizer": "lowercase"
}
}
}
}

La siguiente consulta busca títulos de películas que contengan caracteres entre city countryy. Incluye una etapa para limitar la salida $limit a 5 resultados y una etapa para excluir todos los $project campos title excepto.

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

La siguiente query busca en el campo funding_rounds.raised_amount de la colección sample_training.companies valores mayores o iguales a 500000 y menores o iguales a 1000000. Usa el returnStoredSource: true y returnScope para recuperar y devolver los campos dentro del arreglo de objetos funding_rounds, que están almacenados en mongot. La query utiliza el índice de muestra del ejemplo Usar ruta relativa para fuente almacenada.

➤ Prueba esto en el búsqueda Playground. Los resultados en el MongoDB Search Playground pueden variar debido a que los datos en el MongoDB Search Playground son más pequeños que la colección de muestra utilizada en el siguiente ejemplo.

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

La siguiente consulta busca películas con una duración mayor o igual a 2 y menor o igual 3 a. La consulta utiliza la etapa para recuperar todas las películas en los siguientes grupos (años) que coinciden con los criterios de $searchMeta búsqueda:

  • 1990, límite inferior inclusivo para este depósito

  • 2000, límite superior exclusivo para el cubo 1990 y límite inferior inclusivo para este cubo

  • 2010, límite superior exclusivo para el cubo 2000 y límite inferior inclusivo para este cubo

  • 2020, límite superior exclusivo para el depósito 2010

La consulta utiliza un índice llamado default que indexa dinámicamente todos los campos en el espacio de nombres 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') }
]
}
}
}
]

Volver

queryString

En esta página