Definición
Nuevo en la versión 8.0.
Devuelve las configuraciones de consulta agregadas previamente con
setQuerySettingsLa configuración se aplica a todo el clúster. El clúster conserva la configuración después del apagado.
Sintaxis
Si utiliza varias etapas de canalización, coloque $querySettings primero en la canalización.
db.aggregate( [ { $querySettings: { showDebugQueryShape: <boolean> } }, // Add any additional pipeline stages after $querySettings ... ] )
Campos de comandos
$querySettings toma este campo:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| booleano | Opcional | Si, El valor por defecto es |
Ejemplos
Los siguientes ejemplos crean una colección, agregan configuraciones de consulta y devuelven las configuraciones:
Crear la colección de ejemplo y los índices
Ejecuta:
// Create pizzaOrders collection db.pizzaOrders.insertMany( [ { _id: 0, type: "pepperoni", totalNumber: 5, orderDate: new Date( "2024-01-15T12:00:00Z" ) }, { _id: 1, type: "cheese", totalNumber: 15, orderDate: new Date( "2024-01-23T11:12:32Z" ) }, { _id: 2, type: "vegan", totalNumber: 20, orderDate: new Date( "2024-03-20T10:01:12Z" ) } ] ) // 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.
Agregar la configuración de la consulta
El siguiente ejemplo setQuerySettings agrega configuraciones de consulta:
db.adminCommand( { setQuerySettings: { find: "pizzaOrders", filter: { orderDate: { $gt: ISODate( "2024-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" } } )
El campo comment está disponible a partir de MongoDB 8.1 (y 8.0.4).
Devolver la configuración de la consulta
El siguiente ejemplo utiliza una etapa $querySettings en una pipeline de agregación para devolver configuraciones de queries:
db.aggregate( [ { $querySettings: { showDebugQueryShape: true } } ] )
Como showDebugQueryShape es true, el documento debugQueryShape se incluye en la salida. Puede usar el identificador queryShapeHash para localizar la configuración de la consulta. queryShapeHash y debugQueryShape aparecen resaltados en esta salida:
[ { 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' }, debugQueryShape: { cmdNs: { db: 'test', coll: 'pizzaOrders' }, command: 'find', filter: { orderDate: { '$gt': '?date' } }, sort: { totalNumber: 1 } } } ]
Los ejemplos de Node.js en esta página utilizan la base de datos sample_mflix de
Conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra,consulte "Comenzar" en la documentación del controlador Node.js de MongoDB.
Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $querySettings a una canalización de agregación, utilice el Operador $querySettings en un objeto de canalización.
Para utilizar la $querySettings etapa, primero debe agregar índices y a la querySettings colección.
El siguiente código inserta dos índices en la colección movies:
const year = collection.createIndex({ year: 1 }); const title = collection.createIndex({ title: 1 });
El siguiente código agrega configuraciones de consulta a la colección movies:
const command = { setQuerySettings: { find: "movies", filter: { year: { $gt: 2011 } }, sort: { title: 1 }, $db: "sample_mflix" }, settings: { indexHints: { ns: { db: "sample_mflix", coll: "movies" }, allowedIndexes: [ "year_1" ] }, queryFramework: "classic", comment: "Index hint for year_1 index to improve query performance" } }; const adminDb = client.db("admin"); const result = adminDb.command(command);
El siguiente ejemplo crea una etapa de canalización que devuelve la configuración de consulta previamente agregada para la colección movies. El ejemplo establece la opción showDebugQueryShape en true para incluir el documento debugQueryShape en la salida. A continuación, el ejemplo ejecuta la canalización de agregación:
const pipeline = [ { $querySettings: {showDebugQueryShape: true} } ]; const cursor = adminDb.aggregate(pipeline); return cursor;