Definição
Novidades na versão 8.0.
Retorna configurações de query adicionadas anteriormente com setQuerySettings
. As configurações se aplicam a todo o cluster. O cluster mantém as configurações após o desligamento.
Sintaxe
Se você usar vários estágios do pipeline, coloque o $querySettings
primeiro no pipeline.
db.aggregate( [ { $querySettings: { showDebugQueryShape: <boolean> } }, // Add any additional pipeline stages after $querySettings ... ] )
Campos de comando
$querySettings
usa este campo:
Campo | Tipo | necessidade | Descrição |
---|---|---|---|
| booleano | Opcional | Se O padrão é |
Exemplos
Os exemplos a seguir criam uma coleção, adicionam configurações de query e retornam as configurações:
Criar a coleção e os índices de exemplo
Executar:
// 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 } )
Os índices têm os nomes padrão orderDate_1
e totalNumber_1
.
Adicionar as configurações de query
O exemplo do setQuerySettings
a seguir adiciona configurações de query:
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" } } )
O campo comment
está disponível a partir do MongoDB 8.1 (e 8.0.4).
Retornar as configurações de query
O exemplo a seguir utiliza um estágio do $querySettings
em um pipeline de agregação para retornar configurações de query:
db.aggregate( [ { $querySettings: { showDebugQueryShape: true } } ] )
Como showDebugQueryShape
é true
, o documento debugQueryShape
é incluído na saída. Você pode utilizar o identificador queryShapeHash
para localizar as configurações de consulta. queryShapeHash
e debugQueryShape
estão destacados nesta saída:
[ { 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 } } } ]
Os exemplos do Node.js nesta página usam o banco de dados sample_mflix
dosconjuntos de dados de exemplo do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de exemplo, consulte Introdução na documentação do driver do MongoDB Node.js
Para usar o driver Node.js do MongoDB para adicionar um estágio $querySettings
a um pipeline de agregação , use o operador $querySettings
em um objeto de pipeline.
Para usar o estágio $querySettings
, você deve primeiro adicionar índices e querySettings
à coleção.
O seguinte código insere dois índices na coleção movies
:
const year = collection.createIndex({ year: 1 }); const title = collection.createIndex({ title: 1 });
O seguinte código adiciona configurações de query à coleção 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);
O exemplo a seguir cria um estágio de pipeline que retorna as configurações de query adicionadas anteriormente para a collection movies
. O exemplo define a opção showDebugQueryShape
como true
para incluir o documento debugQueryShape
na saída. Em seguida, o exemplo executa o agregação pipeline:
const pipeline = [ { $querySettings: {showDebugQueryShape: true} } ]; const cursor = adminDb.aggregate(pipeline); return cursor;