Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

setQuerySettings (comando de banco de dados)

setQuerySettings

Novidades na versão 8.0.

setQuerySettings define as configurações de query usadas pelos comandos find, distinct e aggregate .

Você pode usar configurações de query para adicionar dicas de índice, definir filtros de rejeção de operação e definir outros campos para todas as execuções de uma determinada forma de query em um cluster. As configurações de query de um cluster persistem entre reinicializações.

O otimizador de query usa as configurações de query como um input adicional durante o planejamento de query. As dicas de índice nas configurações de query restringem o conjunto de índices disponíveis para o planejador, mas não garantem que o planejador usará o índice. O planejador ainda pode selecionar uma varredura de coleção como o plano vencedor para um determinado hash de forma de query.

As configurações de query de cluster têm precedência sobre as configurações de query ou dicas de índice passadas como um campo de comando . O MongoDB ignora dicas de índice em campos de comando se uma configuração de query correspondente já contiver dicas de índice.

As dicas de índice não afetam a forma de query.

For more information about hints and query settings, see Query Settings Syntax.

Observação

Para remover as configurações de query, use removeQuerySettings. Para ver as configurações de consulta atuais, use um estágio $querySettings em um pipeline de agregação.

A partir do MongoDB 8.0, os filtros de índice estão obsoletos. Em vez disso, use as configurações de query.

As configurações de query têm mais funcionalidades do que os filtros de índice. Os filtros de índice não são persistentes e não é possível criar facilmente filtros de índice para todos os nós do cluster.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

Importante

This command is not supported in M0 and Flex clusters. For more information, see Unsupported Commands.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

Você pode adicionar ou atualizar as configurações de query usando qualquer uma das duas especificações de sintaxe mostradas nesta seção.

Na seguinte sintaxe, você fornece:

  • Os mesmos campos que um comando find, distinct ou aggregate . Consulte as seções de sintaxe nas páginas dos comandos para os campos que você pode incluir em setQuerySettings.

  • Um campo $db para especificar o banco de dados de dados para as configurações da query.

  • Um documento settings com indexHints e outros 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>,
queryKnobs: <document>,
maxTimeMS: <non-negative integer>
}
} )

Você pode fornecer uma string de hash de forma de query existente em setQuerySettings e um documento settings atualizado com indexHints e outros 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>,
queryKnobs: <document>,
maxTimeMS: <non-negative integer>
}
} )

Um hash de forma de query é uma string que identifica exclusivamente a forma de query. Um exemplo de hash de forma de query é "F42757F1AEB68B4C5A6DE6182B29B01947C829C926BCC01226BDA4DDE799766C".

Nas versões suportadas atualmente, espera-se que a mesma forma de query produza o mesmo hash de forma de query entre nós e tipos de implantação. Para aprender como o hash se comporta entre nós, tipos de implantação e clusters, consulte Estabilidade de hash de forma de query.

Para obter a string de hash da forma de query , faça qualquer um destes:

Se você definir as configurações de query usando uma string com hash, o campo representativeQuery é inicialmente ausente da saída do estágio de agregação $querySettings.

A partir do MongoDB 8.3, se a versão de compatibilidade do recurso for 8.3 ou posterior, o MongoDB preenche o campo representativeQuery para configurações de query que você define com um hash de forma de query. Quando o MongoDB executa uma query que corresponde à forma de query, ele agenda o backfill. O backfill não exige nenhuma ação de você.

O backfill é executado assincronamente na medida do possível para limitar o impacto no desempenho nas suas consultas. Uma configuração de query não tem garantia de ser preenchida retroativamente na primeira vez que uma query correspondente é executada. Se um backfill não for concluído, o MongoDB tenta novamente na próxima vez que uma query correspondente for executada.

Para armazenar as query representativas adicionais, o MongoDB 8.3 também aumenta a capacidade de armazenamento para query representativas nas configurações de query além do limite original de 16 MB de documentos BSON.

Dica

Em ambas as variações de sintaxe , você pode fornecer uma array de documentos do indexHints . Você pode omitir os colchetes da array se fornecer apenas um documento indexHints .

O documento settings no comando setQuerySettings usa os seguintes campos:

Campo
tipo de campo
necessidade
Descrição

setQuerySettings

documento ou string

Obrigatório

Você pode fornecer:

  • Os mesmos campos que os de um comando find, distinct ou aggregate e um campo $db com o banco de dados de dados associado ao comando original.

  • Uma string de hash de forma de query existente que identifica exclusivamente a forma de query. Um exemplo de hash de forma de query é "F42757F1AEB68B4C5A6DE6182B29B01947C829C926BCC01226BDA4DDE799766C"`.

indexHints.ns

documento

Opcional

Namespace para dicas de índice. Obrigatório apenas quando dicas de índice opcionais são especificadas.

indexHints.ns.db

string

Condicional

Nome do banco de dados para as dicas de índice. Necessário ao especificar indexHints.ns.

indexHints.ns.coll

string

Condicional

Nome da coleção para as dicas de índice. Obrigatório quando você especifica indexHints.ns.

indexHints.allowedIndexes

array

Opcional

Array de índices para dicas de índice. Uma dica de índice pode ser uma destas:

  • Nome do Índice

  • padrão de chave de índice

  • $natural dica

Para obter mais detalhes, consulte Índices e hint().

queryFramework

string

Opcional

A string da estrutura de query pode ser definida como:

reject

booleano

Opcional

Se true:

  • Novas queries com a forma de query correspondente são rejeitadas e a resposta da query informa que a query é rejeitada.

  • As queries atualmente em andamento não serão rejeitadas.

O padrão é false.

Para habilitar uma forma de query, execute setQuerySettings novamente para a forma de query e defina reject como false. Se você definir reject como true e depois de volta para false usando setQuerySettings , então:

  • Se o documento settings não estiver vazio, o setQuerySettings ativará a forma de query.

  • Se o seu documento settings contiver apenas reject: false, então setQuerySettings retornará um erro. Em vez disso, utilize o comando removeQuerySettings para remover as configurações e então utilize setQuerySettings para adicionar configurações de query.

comment

Tipo de BSON

Opcional

Um comentário pode ser qualquer tipo de BSON válido. Por exemplo: string, objeto e assim por diante.

Você pode usar um comentário para fornecer informações adicionais sobre as configurações de query. Por exemplo, para adicionar uma string que indica por que você adicionou as configurações de query, use comment: "Index hint for orderDate_1 index to improve query performance".

Para atualizar um comentário, execute setQuerySettings novamente e use comment: { body: { msg: "Updated comment" } }.

Você não pode remover um comentário, mas pode defini-lo como uma string com um caractere de espaço. Você pode remover as configurações de query removeQuerySettings usando.

Os comentários aparecem na $querySettings saída do estágio do pipeline de agregação, na saída do comando explain() e nos registros de queries lentas.

Novo na versão 8.1: (e 8.0.4).

queryKnobs

documento

Opcional

Um documento de { <knobName>: <value> } pares que substitui os parâmetros internos do servidor apenas para esta forma de query, em vez de em toda a instância com setParameter. Cada botão mantém o tipo, os limites e o padrão do seu parâmetro de servidor subjacente.

Ao contrário dos outros campos setQuerySettings, que substituem o valor inteiro quando definidos, queryKnobs é mesclado com os valores de knob existentes. setQuerySettings altera os knobs que você inclui no documento queryKnobs e deixa todos os outros knobs inalterados.

queryKnobs: {} resulta em uma operação nula. Para remover um único botão sem afetar os outros, defina o valor desse botão como null.

Novidades na versão 9.0.

maxTimeMS

non-negative integer

Opcional

Define um limite de tempo em milissegundos para execuções da forma de query. Use esta configuração para limitar uma única forma com regressão ou aumentar um tempo limite de cliente muito curto sem alterar o código do aplicativo.

Se você omitir maxTimeMS das configurações de query, o timeout da operação seguirá a opção maxTimeMS no nível do comando e o parâmetro de cluster defaultMaxTimeMS. Definir maxTimeMS como 0 limpa a configuração de query maxTimeMS, e a operação retorna aos valores padrão do nível de comando e do cluster.

Um valor maxTimeMS definido com setQuerySettings tem precedência sobre um valor maxTimeMS fornecido no comando.

Novidades na versão 9.0.

Novidades na versão 9.0.

A partir do MongoDB 9.0, você pode usar a configuração queryKnobs para substituir parâmetros internos do servidor para uma única forma de query em vez de toda a instância. Defina o campo queryKnobs para query direcionadas para mitigar o impacto de uma forma regressiva sem alterar o comportamento de outras cargas de trabalho na mesma implantação.

Por exemplo, você pode substituir o parâmetro de servidor notablescan para uma única forma de query em vez de toda a instância, definindo queryKnobs como { noTableScan: true }.

Cada controle mantém o tipo, os limites e o padrão de seu parâmetro de servidor subjacente, e setQuerySettings executa a mesma validação que setParameter executa. setQuerySettings rejeita os seguintes valores:

  • Knobs desconhecidos

  • Botões que não estão marcados como configuráveis por meio de configurações de query

  • BSON types incorretos

  • Strings de enumeração inválidas

  • Valores fora da faixa

  • Parâmetros cujo requisito mínimo de versão de compatibilidade do recurso excede a versão de compatibilidade do recurso do cluster

O valor efetivo de um parâmetro segue esta precedência, da mais alta para a mais baixa:

  1. Conjunto de valores por forma definido com queryKnobs

  2. Valor de toda a instância definido com setParameter

  3. Valor padrão compilado

Os knobs de query fazem parte das configurações de query com hash, portanto, também fazem parte da chave de cache de plano. Se você alterar um valor de knob, o MongoDB produz uma nova chave de cache de plano, para que o planejador crie um novo plano em vez de reutilizar um plano cache obsoleto.

Ao contrário do setParameter, que se aplica por processo e pode diferir entre nós, o MongoDB aplica os mesmos valores de queryKnobs em todo o cluster para a forma de query correspondente.

Importante

Ao fazer o downgrade da versão de compatibilidade do recurso de 9.0 para uma versão anterior, uma migração atualizará as configurações de query armazenadas. A migração removerá todos os botões cuja versão de compatibilidade do recurso mínima exceda a versão de destino e excluirá qualquer entrada de configurações que ainda contenha apenas valores padrão. Fazer o upgrade novamente para 9.0 não restaurará os botões removidos. Você deve aplicá-los novamente com setQuerySettings.

Os exemplos a seguir criam uma coleção e adicionam configurações de consulta para comandos diferentes. Para todas as execuções de uma forma de query no cluster, os exemplos restringem o planejador de query ao uso do índice sugerido ou a uma varredura de coleção.

1

Executar:

// 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 } )

Os índices têm os nomes padrão orderDate_1 e totalNumber_1.

2

O exemplo seguinte adiciona configurações de query para um comando find . O exemplo fornece campos em setQuerySettings para o comando find e inclui o índice orderDate_1 em allowedIndexes.

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

Execute este comando explain :

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

A seguinte saída truncada mostra que as configurações de consulta estão definidas:

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

O exemplo a seguir executa a query:

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

O otimizador de query usa as configurações de query como uma entrada adicional durante o planejamento de query, o que afeta o plano selecionado para executar a query.

Saída da 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

O exemplo a seguir utiliza um estágio $querySettings em um pipeline de agregação para obter as configurações de consulta:

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

Saída truncada, que inclui o 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

O exemplo seguinte adiciona configurações de query para um comando distinct :

db.adminCommand( {
setQuerySettings: {
distinct: "pizzaOrders",
key: "totalNumber",
query: { totalNumber: 10, orderDate :{ '$gt': ISODate('2023-01-20T00:00:00.000Z') } } ,
$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

O exemplo a seguir adiciona configurações de query para um comando aggregate :

db.adminCommand( {
setQuerySettings: {
aggregate: "pizzaOrders",
pipeline: [
{ $match: { totalNumber: 10, orderDate :{ '$gt': ISODate('2023-01-20T00:00:00.000Z') } } },
{ $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"
}
} )
Receber um selo de habilidade

Domine "Otimização de Consultas" gratuitamente!

Saiba mais

Avalie esta página