Docs Menu
Docs Home
/ /

setQuerySettings (comando de base de datos)

setQuerySettings

Nuevo en la versión 8.0.

Puede utilizar la configuración de consultas para agregar sugerencias de índice y definir Filtros de rechazo de operaciones y configuración de otros campos. La configuración se aplica a la forma de consulta en todo el clúster. El clúster conserva la configuración después del apagado.

Por ejemplo, la configuración de consultas le permite utilizar un índice para todas las ejecuciones de una forma de consulta en un clúster.

El optimizador de consultas utiliza la configuración de la consulta como una entrada adicional durante la planificación de la consulta, lo que afecta el plan seleccionado para ejecutar la consulta.

setQuerySettings Define las configuraciones de consulta utilizadas por los comandos,find distinct aggregate y.

A partir de MongoDB,8.0 use la configuración de consultas en lugar de filtros de índice. Los filtros de índice están obsoletos a partir de MongoDB.8.0

La configuración de consultas ofrece más funciones que los filtros de índice. Además, estos no son persistentes y no es fácil crear filtros de índice para todos los nodos del clúster.

Las configuraciones de consulta tienen mayor precedencia que las sugerencias de índice. MongoDB ignora las sugerencias de índice que se pasan como campos de comando cuando una configuración de consulta coincidente contiene sugerencias de índice. Las sugerencias de índice no afectan la forma de la consulta. Para obtener más información sobre las sugerencias y la configuración de consulta, consulte Sintaxis de configuración de consulta.

Nota

Para remover la configuración del query, utilice removeQuerySettings. Para obtener la configuración del query, utilice una etapa de $querySettings en una canalización de agregación.

Puede agregar o actualizar la configuración de consultas utilizando cualquiera de las dos especificaciones de sintaxis que se muestran en esta sección.

En la siguiente sintaxis, proporciona:

  • Los mismos campos que un comando, o. Consulte las secciones de sintaxis en las páginas de esos comandos para ver los campos que puede find distinct aggregate incluir setQuerySettings en.

  • Un campo $db para especificar la base de datos para la configuración de la consulta.

  • Un documento settings con indexHints y otros campos.

db.adminCommand( {
setQuerySettings: {
<fields>, // Provide fields for
// find, distinct, or aggregate command
$db: <string> // Provide a database name
},
// Provide a settings document with indexHints and other fields
settings: {
indexHints: [ {
ns: { db: <string>, coll: <string> },
allowedIndexes: <array>
}, ... ],
queryFramework: <string>,
reject: <boolean>,
comment: <BSON type>
}
} )

Puede proporcionar una cadena hash de forma de consulta existente en setQuerySettings y un documento settings actualizado con indexHints y otros campos:

db.adminCommand( {
setQuerySettings: <string>, // Provide an existing query shape hash string
// Provide a settings document with indexHints and other fields
settings: {
indexHints: [ {
ns: { db: <string>, coll: <string> },
allowedIndexes: <array>
}, ... ],
queryFramework: <string>,
reject: <boolean>,
comment: <BSON type>
}
} )

Un hash de forma del query es un string que identifica de manera única la forma del query. Un ejemplo de forma del query hash es "F42757F1AEB68B4C5A6DE6182B29B01947C829C926BCC01226BDA4DDE799766C".

Para obtener la cadena hash de forma de consulta, realice cualquiera de estas acciones:

Si configura la configuración de la consulta utilizando una cadena hash, no tendrá el campo representativeQuery en la salida de la etapa de agregación $querySettings.

Tip

En ambas variantes de sintaxis, puede proporcionar una matriz de indexHints documentos. Puede omitir los corchetes de la matriz si solo proporciona un documento indexHints.

El comando toma estos campos:

Campo
Tipo de campo
Necesidad
Descripción

setQuerySettings

documento o cadena

Requerido

Puede proporcionar:

  • Los mismos campos que en un find distinctcomando, o aggregate $db y un campo con la base de datos asociada con el comando original.

  • Una cadena hash de forma de consulta existente que identifica de forma única la forma de consulta. Un ejemplo de hash de forma de consulta es "F42757F1AEB68B4C5A6DE6182B29B01947C829C926BCC01226BDA4DDE799766C"`.

indexHints.ns

Documento

Opcional

Espacio de nombres para sugerencias de índice. Solo se requiere cuando se especifican sugerencias de índice opcionales.

db

string

Requerido

Nombre de la base de datos para sugerencias de índice.

coll

string

Requerido

Nombre de la colección de sugerencias de índice.

indexHints.allowedIndexes

arreglo

Opcional

Matriz de índices para sugerencias de índice. Una sugerencia de índice puede ser una de las siguientes:

  • Nombre del índice

  • patrón de clave de índice

  • $natural hint

Para más detalles, consulta Índices y hint().

queryFramework

string

Opcional

La cadena del marco de consulta se puede configurar como:

reject

booleano

Opcional

Si true:

  • Las consultas nuevas con la forma de consulta coincidente se rechazan y la respuesta de la consulta indica que la consulta se rechaza.

  • Cualquier consulta que esté actualmente en curso no será rechazada.

El valor por defecto es false.

Para habilitar una forma de consulta, ejecute setQuerySettings de nuevo para la forma de consulta y configure reject en false. Si configura reject en true y luego vuelve a false usando setQuerySettings, entonces:

  • Si su documento settings no está vacío, entonces setQuerySettings habilita la forma de consulta.

  • Si su documento settings solo contiene reject: false, setQuerySettings devuelve un error. En su lugar, use el comando removeQuerySettings para eliminar la configuración y luego use setQuerySettings para agregar la configuración de consulta.

comment

Tipo BSON

Opcional

Un comentario puede ser de cualquier tipo BSON válido. Por ejemplo: cadena, objeto, etc.

Puede usar un comentario para proporcionar información adicional sobre la configuración de la consulta. Por ejemplo, para agregar una cadena que indique el motivo de la configuración, use comment: "Index hint for orderDate_1 index to improve query performance".

Para actualizar un comentario, ejecute setQuerySettings nuevamente y use comment: { body: { msg: "Updated comment" } }.

No se puede eliminar un comentario, pero se puede establecer como una cadena con un espacio. Se puede eliminar la configuración de la consulta removeQuerySettings usando.

Los comentarios aparecen en la salida de la etapa $querySettings de agregación, en la salida del comando explain() y en los registros de consultas lentas.

Disponible a partir de MongoDB 8.1 (y 8.0.4).

Los siguientes ejemplos crean una colección y añaden configuraciones de consulta para diferentes comandos. Los ejemplos utilizan un índice para todas las ejecuciones de una forma de consulta en el clúster.

1

Ejecuta:

// Create pizzaOrders collection
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" ) },
{ _id: 4, type: "cheese", size: "medium", price: 13,
totalNumber: 50, orderDate: ISODate( "2024-01-12T21:23:13.331Z" ) },
{ _id: 5, type: "cheese", size: "large", price: 14,
totalNumber: 10, orderDate: ISODate( "2024-01-12T05:08:13Z" ) },
{ _id: 6, type: "vegan", size: "small", price: 17,
totalNumber: 10, orderDate: ISODate( "2023-01-13T05:08:13Z" ) },
{ _id: 7, type: "vegan", size: "medium", price: 18,
totalNumber: 10, orderDate: ISODate( "2023-01-13T05:10:13Z" ) }
] )
// Create ascending index on orderDate field
db.pizzaOrders.createIndex( { orderDate: 1 } )
// Create ascending index on totalNumber field
db.pizzaOrders.createIndex( { totalNumber: 1 } )

Los índices tienen los nombres predeterminados orderDate_1 y totalNumber_1.

2

El siguiente ejemplo agrega la configuración de consulta para un find comando. El ejemplo proporciona campos en setQuerySettings para el find comando e incluye el orderDate_1 índice allowedIndexes en.

db.adminCommand( {
setQuerySettings: {
find: "pizzaOrders",
filter: {
orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) }
},
sort: {
totalNumber: 1
},
$db: "test"
},
settings: {
indexHints: {
ns: { db: "test", coll: "pizzaOrders" },
allowedIndexes: [ "orderDate_1" ]
},
queryFramework: "classic",
comment: "Index hint for orderDate_1 index to improve query performance"
}
} )
3

Ejecute este explain comando:

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

La siguiente salida truncada muestra que la configuración de la consulta está establecida:

queryPlanner: {
winningPlan: {
stage: 'SINGLE_SHARD',
shards: [
{
explainVersion: '1',
...
namespace: 'test.pizzaOrders',
indexFilterSet: false,
parsedQuery: { orderDate: { '$gt': ISODate('2023-01-20T00:00:00.000Z') } },
querySettings: {
indexHints: {
ns: { db: 'test', coll: 'pizzaOrders' },
allowedIndexes: [ 'orderDate_1' ]
},
queryFramework: 'classic',
comment: 'Index hint for orderDate_1 index to improve query performance'
},
...
}
...
]
}
}
4

El siguiente ejemplo ejecuta la query:

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

El optimizador de consultas utiliza la configuración de la consulta como una entrada adicional durante la planificación de la consulta, lo que afecta el plan seleccionado para ejecutar la consulta.

Salida de la query:

[
{
_id: 0,
type: 'pepperoni',
size: 'small',
price: 19,
totalNumber: 10,
orderDate: ISODate('2023-03-13T08:14:30.000Z')
},
{
_id: 5,
type: 'cheese',
size: 'large',
price: 14,
totalNumber: 10,
orderDate: ISODate('2024-01-12T05:08:13.000Z')
},
{
_id: 3,
type: 'cheese',
size: 'small',
price: 12,
totalNumber: 15,
orderDate: ISODate('2023-03-13T11:21:39.736Z')
},
{
_id: 1,
type: 'pepperoni',
size: 'medium',
price: 20,
totalNumber: 20,
orderDate: ISODate('2023-03-13T09:13:24.000Z')
},
{
_id: 2,
type: 'pepperoni',
size: 'large',
price: 21,
totalNumber: 30,
orderDate: ISODate('2023-03-17T09:22:12.000Z')
},
{
_id: 4,
type: 'cheese',
size: 'medium',
price: 13,
totalNumber: 50,
orderDate: ISODate('2024-01-12T21:23:13.331Z')
}
]
5

El siguiente ejemplo utiliza una etapa $querySettings en un pipeline de agregación para obtener la configuración de la query:

db.aggregate( [
{ $querySettings: {} }
] )

Salida truncada, que incluye el campo queryShapeHash:

[
{
queryShapeHash: 'AB8ECADEE8F0EB0F447A30744EB4813AE7E0BFEF523B0870CA10FCBC87F5D8F1',
settings: {
indexHints: [
{
ns: { db: 'test', coll: 'pizzaOrders' },
allowedIndexes: [ 'orderDate_1' ]
}
],
queryFramework: 'classic',
comment: 'Index hint for orderDate_1 index to improve query performance'
},
representativeQuery: {
find: 'pizzaOrders',
filter: { orderDate: { '$gt': ISODate('2023-01-20T00:00:00.000Z') } },
sort: { totalNumber: 1 },
'$db': 'test'
}
}
]
6

El siguiente ejemplo agrega configuraciones de consulta para un distinct comando:

db.adminCommand( {
setQuerySettings: {
distinct: "pizzaOrders",
key: "totalNumber",
query: { type: "pepperoni"} ,
$db: "test"
},
settings: {
indexHints: {
ns: { db: "test", coll: "pizzaOrders" },
allowedIndexes: [ "orderDate_1" ]
},
queryFramework: "classic",
comment: "Index hint for orderDate_1 index to improve query performance"
}
} )
7

El siguiente ejemplo agrega configuraciones de consulta para un aggregate comando:

db.adminCommand( {
setQuerySettings: {
aggregate: "pizzaOrders",
pipeline: [
{ $match: { size: "medium" } },
{ $group: {
_id: "$type",
totalMediumPizzaOrdersGroupedByType: { $sum: "$totalNumber" }
} }
],
$db: "test"
},
settings: {
indexHints: {
ns: { db: "test", coll: "pizzaOrders" },
allowedIndexes: [ "totalNumber_1" ]
},
queryFramework: "classic",
comment: "Index hint for totalNumber_1 index to improve query performance"
}
} )

Volver

setDefaultRWConcern

Obtén una insignia de habilidad

¡Domina "Query Optimization" gratis!

Más información

En esta página