Definición
rangeEl operador
rangepermite 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).rangeAdmite la consulta de los siguientes tipos de datos:número,
int32int64incluidos, ydoublecadena, indexada como tipo de token de búsqueda de MongoDB
Sintaxis
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 }
opciones
range utiliza los siguientes términos para construir una consulta:
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| Fecha, número, cadena u objectId de BSON | Encuentre valores mayores que (
| no |
| Fecha, número, cadena u objectId de BSON | Encuentre valores menores que (
| no |
| cadena o matriz de cadenas | Campo o campos indexados para buscar. | sí |
| Objeto | Modifique la puntuación asignada a los resultados de búsqueda coincidentes. Puede modificar la puntuación predeterminada con las siguientes opciones:
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 | no |
Ejemplos
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.
Ejemplo de número
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.
Índice de muestra
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 }
Consulta de muestra
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.
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." }
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.
Índice de muestra
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 }
Consulta de muestra
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
titleyruntimeAgregue un campo llamado
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 }
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.
Índice de muestra
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 } }
Consulta de muestra
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.
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 ]
Ejemplo de fecha
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.
Índice de muestra
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" } } } }
Consulta de muestra
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.
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 ]
Ejemplo de ObjectId
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.
Índice de muestra
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" } } } }
Consulta de muestra
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.
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 ]
Ejemplo de cadena
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.
Índice de muestra
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" } } } }
Consulta de muestra
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.
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' } ]
Ejemplo de documentos incrustados
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.
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' } ]
Ejemplo de metadatos
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') } ] } } } ]