Docs Menu
Docs Home
/ /

$querySettings (etapa de agregación)

$querySettings

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.

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
...
] )

$querySettings toma este campo:

Campo
Tipo
Necesidad
Descripción

showDebugQueryShape

booleano

Opcional

Si,true $querySettings devuelve una versión de depuración de la salida de la forma de la consulta. Verá un ejemplo en la siguiente sección. Para obtener más información sobre la salida, consulte Forma de la consulta.

El valor por defecto es false.

Los siguientes ejemplos crean una colección, agregan configuraciones de consulta y devuelven las configuraciones:

1

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.

2

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).

3

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;

Volver

$project

En esta página