Docs Menu
Docs Home
/ /

Formas del query

Cambiado en la versión 8.0.

Una forma de consulta es un conjunto de especificaciones que agrupan consultas similares. Estas especificaciones pueden incluir filtros, ordenaciones, proyecciones, etapas de la canalización de agregación, un espacio de nombres, etc. Las consultas con especificaciones similares comparten la misma forma de consulta.

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 planCacheShapeHash. Para conocer los componentes de un comando que diferencian las formas de consulta de la caché de planes, consulte 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 de consulta de caché del plan existente admite:

A partir de MongoDB 8.0, la nueva forma de consulta admite:

  • Configuración de consulta, que puede agregar setQuerySettings con. (Como verá más adelante en esta página, la configuración de consulta especifica índices y configuraciones de ejecución para una forma de consulta).

  • $queryStats estadísticas de forma de consulta.

  • Los campos y operaciones también son compatibles con la forma de consulta de 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, que admiten una gama más amplia de formas de consulta que la forma de consulta de caché de plan existente.

  • filtros de rechazo de operaciones para bloquear find aggregation distinct los comandos, y que tienen una forma de consulta especificada.

  • Todo el proceso de agregación.

A partir de MongoDB,8.0 puede utilizar una $querySettings etapa de canalización para devolver las configuraciones de consulta especificadas para cada forma de consulta.

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 de consulta muestra las especificaciones para un comando find en la colección pizzaOrders en la base de datos predeterminada test:

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 especificada. El ejemplo utiliza un orden ascendente según el número total de pizzas pedidas.

Para ver las cadenas hexadecimales 8.0 queryShapeHash y de MongoDB,planCacheShapeHash puede utilizar el explain comando.

Los siguientes explain ejemplos contienen consultas con la misma forma de consulta:

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 consulta tiene una forma diferente si tiene especificaciones diferentes. Por ejemplo, si tiene diferentes etapas de filtro, ordenación, proyección, espacio de nombres o canalización de agregación.

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

Por ejemplo, ordenar por pizza price cambia la forma de la consulta:

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 agregue configuraciones de consulta para las formas de consulta en lugar de filtros de índice para las colecciones. Los filtros de índice están obsoletos a partir de 8.0 MongoDB. Las configuraciones de consulta tienen más funciones que los filtros de índice, y estos no son persistentes después del cierre 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 de consultas utiliza la configuración de consulta como entrada adicional durante la planificación. Esta configuración afecta al plan seleccionado para ejecutar una consulta con una forma de consulta coincidente.

Volver

Planes de query

Obtén una insignia de habilidad

¡Domina "Query Optimization" gratis!

Más información

En esta página