Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

range (MongoDB Search Operador)

range

El operador range admite la búsqueda y puntuación de valores numéricos, de fecha y de string. Puede utilizar este operador para encontrar resultados que se encuentren dentro de un rango numérico, de fecha, objectId o de letras (del alfabeto inglés) determinado.

range Admite la consulta de los siguientes tipos de datos:

  • número, incluyendo int32, int64 y double

  • fecha

  • string, indexado como tipo de token de búsqueda de MongoDB token

  • 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 query:

Campo
Tipo
Descripción
Necesidad

gt or gte

Fecha, número, cadena u objectId de BSON

Encontrar valores mayores que (>) o mayores o iguales a (>=) al valor dado.

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

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

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

  • Para los campos ObjectId, el valor debe estar indexado como un tipo de dato objectId o se debe establecer mapas dinámicos en true.

no

lt or lte

Fecha, número, cadena u objectId de BSON

Encuentra valores menores que (<) o menores o iguales que (<=) al 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 formateada ISODate.

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

  • Para los campos ObjectId, el valor debe estar indexado como un tipo de dato objectId o se debe establecer mapas dinámicos en true.

no

path

string o arreglo de strings

Campo o campos indexados a buscar.

score

Objeto

Modifica la puntuación asignada a los resultados de búsqueda coincidentes. Puedes modificar la puntuación por defecto utilizando las siguientes opciones:

  • boostMultiplica la puntuación resultante por el número dado.

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

  • function: reemplaza el resultado de la puntuación con la expresión dada.

Cuando se consultan valores en arreglos, MongoDB Search asigna mayores puntuaciones si más valores en el arreglo coinciden con la query.

Para obtener información sobre cómo usar score en tu query, consulta Calificación de los Documentos en los Resultados.

no

Los siguientes ejemplos utilizan la colección en los datos de muestra. Si cargaste los datos de ejemplo en tu clúster, puedes crear los índices utilizando las definiciones de índices en los ejemplos siguientes y ejecutar las consultas de ejemplo en tu 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 en 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 query busca películas con una duración mayor o igual a 2 y menor o igual a 3. Incluye una etapa $limit para limitar la salida a 5 resultados y una etapa $project para excluir todos los campos excepto title y 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 ejemplo, puede usar asignaciones estáticas o dinámicas para indexar el campo runtime en la colección sample_mflix.movies. La query utiliza 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 query busca todas las películas con una duración inferior o igual a 2. Incluye una etapa $limit para limitar la salida a 5 resultados y una etapa $project para:

  • Excluir todos los campos salvo 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 query busca películas estrenadas entre enero de 1, 2010 y enero de 1, 2015. Incluye una etapa de $limit para limitar los resultados a 5 y una etapa de $project para excluir todos los campos excepto title y 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]

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 en 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 query el campo _id para un rango de valores objectId 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 llamada default indexa el campo title en la colección movies como tipo de búsqueda 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 intervalo

  • 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 intervalo 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