Definición
rangeEl operador
rangeadmite 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.rangesoporta la consulta de los siguientes tipos de datos:número, incluyendo
int32,int64ydouble
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 "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>] 10 } 11 } 12 }
opciones
range utiliza los siguientes términos para construir una query:
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| fecha, número o string BSON, o ObjectId | Encontrar valores mayores que (
| no |
| fecha, número o string BSON, o ObjectId | Encuentra valores menores que (
| no |
| string o arreglo de strings | Campo o campos indexados a buscar. | Sí |
| Objeto | Modifica la puntuación asignada a los resultados de búsqueda coincidentes. Puedes modificar la puntuación por defecto utilizando las siguientes opciones:
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 | no |
| string o arreglo de strings | Faceta o lista de facetas que se deben excluir del recálculo del recuento en función de esta query. El valor debe ser uno o más nombres de una faceta definida en | no |
Ejemplos
Los siguientes ejemplos utilizan la colección en los datos de muestra. Si cargaste los datos de muestra en el clúster, puedes crear los índices utilizando las definiciones de índice en los ejemplos siguientes y ejecutar las query de ejemplo en el clúster.
Ejemplo de número
Los siguientes ejemplos utilizan índices en campos numéricos de los datos de muestra y ejecutan queries range en los campos indexados.
En este ejemplo, puedes utilizar asignaciones estáticas o dinámicas para indexar el campo runtime en la colección sample_mflix.movies. La query utiliza los campos gte y lte para definir el rango numérico de búsqueda.
Índice de muestra
Utilice una de las siguientes definiciones de índice:
Query de muestra
La siguiente query busca películas con una duración mayor o igual a 2 y menor o igual a 3. Incluye una $limit etapa para limitar la salida a 5 resultados y una $project etapa para excluir todos los campos excepto title y 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 ])
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.
Índice de muestra
Utilice una de las siguientes definiciones de índice:
Query de muestra
La siguiente query busca todas las películas con una duración menor o igual a 2. Incluye una fase $limit para limitar la salida a 5 resultados y una fase $project para:
Excluir todos los campos salvo
titleyruntimeAñade 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 ])
El siguiente ejemplo indexa de forma dinámica todos los campos indexables de forma dinámica, incluidos aquellos con arreglos de valores numéricos, en la colección sample_analytics.customers. La query de muestra utiliza los campos gte y lte para buscar todos los valores entre los valores dados en un arreglo 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 un arreglo de valores numéricos.
{ "mappings": { "dynamic": true } }
Query de muestra
La siguiente query busca cuentas de cliente entre 250000 y 300000. Incluye una $limit etapa para limitar la salida a 5 resultados y una $project etapa 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 ])
Ejemplo de fecha
El siguiente ejemplo utiliza el operador range para hacer queries a un campo de fecha en la colección sample_mflix.movies. En este ejemplo, se pueden utilizar asignaciones estáticas o dinámicas para indexar el campo de tipo date denominado released en la colección.
Índice de muestra
Utilice una de las siguientes definiciones de índice:
Query de muestra
La siguiente query busca películas que se estrenaron entre el 1 de enero de 2010 y el 1 de enero de 2015. Incluye una $limit etapa para limitar la salida a 5 resultados y una $project etapa para excluir todos los campos excepto title y 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 ])
Ejemplo de ObjectId
En el siguiente ejemplo se utiliza el operador range para consultar un campo objectId de la colección sample_mflix.movies. En este ejemplo, puedes utilizar asignaciones estáticas o dinámicas para indexar el campo de tipo objectId denominado _id en la colección.
Índice de muestra
Utilice una de las siguientes definiciones de índice:
Query de muestra
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.
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 ])
Ejemplo de string
El siguiente ejemplo utiliza el operador range para consultar un campo de cadena en la colección sample_mflix.movies. Para este ejemplo, debes usar asignaciones estáticas para indexar el campo llamado title en la colección como el tipo MongoDB Search token.
Índice de muestra
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" } } } }
Query de muestra
La siguiente query busca títulos de películas que contengan caracteres entre city y country. Incluye una $limit etapa para limitar la salida a 5 resultados y una $project etapa para excluir todos los campos excepto 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 ])
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 ])
Ejemplo de metadatos
La siguiente query busca películas con una duración mayor o igual a 2 y menor o igual a 3. La query utiliza la etapa $searchMeta para recuperar todas las películas en los siguientes intervalos (años) que cumplen con los criterios de 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 query utiliza un índice llamado default que indexa dinámicamente todos los campos en el namespace 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 ] } } } } } ])