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

Formas del query

Cambiado en la versión 8.0.

Una forma del query es un conjunto de especificaciones que agrupan queries similares. Las especificaciones pueden incluir filtros, ordenamientos, proyecciones, etapas del pipeline de agregación, un espacio de nombres y otros. Los queries que tienen especificaciones similares tienen la misma forma del query.

Nota

A partir de MongoDB,8.0 la forma de consulta preexistente se renombra como forma de consulta de caché de plan y la queryHash el campo se renombra como planCacheShapeHash. Para conocer los componentes de un comando que diferencian las formas de consulta de la caché del plan, consulta la Definición de laforma de consulta de la caché de planes. MongoDB 8.0 utiliza la nueva forma de consulta y la forma de consulta de la caché de planes existente, como se muestra en esta página.

En MongoDB 8.0 y versiones anteriores, la forma del query de la caché de planes existente admite:

A partir de MongoDB 8.0, la nueva forma del query admite:

  • query settings, que puedes agregar con setQuerySettings. (Como verás más adelante en esta página, la configuración del query especifica los índices y la configuración de ejecución para una forma del query).

  • $queryStats estadísticas de la forma del query.

  • los campos y operaciones también admitidos por la forma del query de la caché del plan. Ejemplos: filter, sort, y projection.

  • La mayoría de los campos y operandos disponibles para los comandos, y. Para ver los campos y operandos de los comandos, consulte las secciones de Sintaxis en cada página de find distinct aggregate comando.

  • la estructura general de los comandos find, aggregation y distinct, los cuales admiten un rango más amplio de formas del query que la forma del query de la caché de planes existente.

  • filtros de rechazo de operación para bloquear los comandos find, aggregation y distinct que tengan una forma del query especificada.

  • Todo el proceso de agregación.

A partir de MongoDB 8.0, puedes usar una etapa $querySettings de pipeline para devolver configuraciones de query especificadas para cada forma del query.

Las siguientes secciones muestran ejemplos con formas del query para la siguiente colección de ejemplos pizzaOrders:

db.pizzaOrders.insertMany( [
{ _id: 0, type: "pepperoni", size: "small", price: 19,
totalNumber: 10, orderDate: ISODate( "2023-03-13T08:14:30Z" ) },
{ _id: 1, type: "pepperoni", size: "medium", price: 20,
totalNumber: 20, orderDate: ISODate( "2023-03-13T09:13:24Z" ) },
{ _id: 2, type: "pepperoni", size: "large", price: 21,
totalNumber: 30, orderDate: ISODate( "2023-03-17T09:22:12Z" ) },
{ _id: 3, type: "cheese", size: "small", price: 12,
totalNumber: 15, orderDate: ISODate( "2023-03-13T11:21:39.736Z" ) }
] )

El siguiente ejemplo de forma del query muestra las especificaciones de un comando find en la colección pizzaOrders de la base de datos test por defecto:

find: "pizzaOrders",
filter: {
orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) }
},
sort: {
totalNumber: 1
},
$db: "test"

El filtro de ejemplo limita los documentos a aquellos con una fecha de pedido posterior a la fecha especificada. El ejemplo tiene un orden ascendente en el número total de pizzas ordenadas.

Para ver los queryShapeHash y planCacheShapeHash strings hexadecimales de MongoDB 8.0, puedes usar el comando explain.

Los siguientes explain ejemplos contienen queries con la misma forma del query:

db.pizzaOrders.explain().find(
{ orderDate: { $gt: ISODate( "2024-05-10T05:15:35Z" ) } } ).
sort( { totalNumber: 1 }
)
db.pizzaOrders.explain().find(
{ orderDate: { $gt: ISODate( "2024-02-05T07:07:16Z" ) } } ).
sort( { totalNumber: 1 }
)
db.pizzaOrders.explain().find(
{ orderDate: { $gt: ISODate( "2023-03-08T08:12:25Z" ) } } ).
sort( { totalNumber: 1 }
)

Dado que las formas de consulta son las mismas, la salida explain tiene el mismo queryShapeHash para cada uno de los ejemplos y el mismo planCacheShapeHash para cada uno. Por ejemplo:

queryShapeHash: 'AB8ECADEE8F0EB0F447A30744EB4813AE7E0BFEF523B0870CA10FCBC87F5D8F1'
planCacheShapeHash: '48E51110'

Una query tiene una forma diferente si la query tiene especificaciones diferentes. Por ejemplo, si una query tiene un filtro diferente, orden, proyección, namespace, u etapas de pipeline de agregación.

En el ejemplo de la sección anterior, el ejemplo ordena por el campo totalNumber. Si cambia el orden de la consulta de totalNumber a otro campo, la consulta tiene una forma del query diferente.

Por ejemplo, ordenar por pizza price cambia la forma del query:

db.pizzaOrders.explain().find(
{ orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) } } ).
sort( { price: 1 }
)

Debido a que la forma del query es diferente de la forma en la sección anterior, la salida explain tiene un queryShapeHash diferente del ejemplo anterior y un planCacheShapeHash diferente. Por ejemplo:

queryShapeHash: 'AC1ECADBE8F1EB0F417A30741AB4813BE7E0BFEF523B0870CA11FCBC87F1A8B2'
planCacheShapeHash: '31A52130'

A partir de MongoDB 8.0, agregar configuraciones de consulta para forma del query en lugar de filtros de índice para colecciones. Los filtros de índices se han desaprobado a partir de MongoDB 8.0. Los ajustes de query tienen más funcionalidades que los filtros de índice, y los filtros de índice no son persistentes después de un apagado del clúster.

La configuración de consultas permite usar un índice para todas las ejecuciones de una forma de consulta en un clúster. Además, para evitar que una operación genere una carga de trabajo excesiva en el clúster, se pueden rechazar todas las operaciones asociadas a una forma de consulta mediante un filtro de rechazo de operaciones.

El optimizador del query utiliza la configuración de la query como una entrada adicional durante la planificación de la query. La configuración de query afecta el plan seleccionado para ejecutar un query que tenga una forma del query coincidente.

Volver

Planes de query

Obtén una insignia de habilidad

¡Domina "Query Optimization" gratis!

Más información

En esta página