Formas de query
Nesta página
Alterado na versão 8.0.
Uma forma de query é um conjunto de especificações que agrupa queries semelhantes. As especificações podem incluir filtros, classificações, projeções, agregação pipeline stages, um namespace e outros. As queries que possuem especificações semelhantes têm a mesma forma de query.
Observação
A partir do MongoDB 8.0, a forma de query preexistente é renomeada para a forma de query do cache do plano, e o campo queryHash
é renomeado planCacheShapeHash
. Para os componentes de um comando que diferencia as formas de query do cache do plano, consulte a definição deforma de query do cache do plano . O MongoDB 8.0 usa a nova forma de forma de query e a forma de query do cache do plano existente, conforme mostrado nesta página.
No MongoDB 8.0 e em versões anteriores, a forma de query do cache do plano existente suporta:
planejamento de query em cenários de cache do plano .
filtros de índice obsoletos . (A partir do MongoDB 8.0, use as novas configurações de query para a nova forma de query.)
um subconjunto do aggregation pipeline.
A partir do MongoDB 8.0, a nova forma de query suporta:
configurações de query, que você pode adicionar com
setQuerySettings
. (Como você verá mais tarde nesta página, as configurações de query especificam índices e configurações de execução para uma forma de query.)os campos e operações também suportados pela forma de query do cache do plano. Exemplos:
filter
,sort
eprojection
.a maioria dos campos e operandos disponíveis para os comandos
find
,distinct
eaggregate
. Para visualizar os campos e operandos dos comandos, consulte as seções Sintaxe em cada página de comando.a estrutura geral dos comandos
find
,aggregation
edistinct
, que suportam uma variedade mais ampla de formas de query do que a forma de query de cache do plano existente.filtros de exclusão de operação para bloquear comandos
find
,aggregation
edistinct
que tenham uma forma de query especificada.todo o pipeline de agregação .
A partir do MongoDB 8.0, você pode usar um estágio de pipeline $querySettings
para retornar as configurações de query especificadas para cada forma de query.
Exemplos
As seguintes seções mostram exemplos com formas de query para o seguinte exemplo de coleção pizzaOrders
:
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" ) } ] )
Formas de query correspondentes
O seguinte exemplo de forma de query mostra especificações para um comando find
na collection pizzaOrders
no banco de banco de dados test
padrão :
find: "pizzaOrders", filter: { orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) } }, sort: { totalNumber: 1 }, $db: "test"
O filtro de exemplo limita os documentos àqueles com uma data de pedido maior que a data especificada. O exemplo tem uma classificação crescente do número total de pizzas solicitadas.
Para visualizar as strings hexadecimais 8.0 queryShapeHash
e planCacheShapeHash
do MongoDB , você pode usar o comando explain
.
Os seguintes exemplos de explain
contêm queries com a mesma forma de query:
db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2024-05-10T05:15:35Z" ) } } ). sort( { totalNumber: 1 } ) db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2024-02-05T07:07:16Z" ) } } ). sort( { totalNumber: 1 } ) db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2023-03-08T08:12:25Z" ) } } ). sort( { totalNumber: 1 } )
Como as formas de query são as mesmas, a saída explain
tem o mesmo queryShapeHash
para cada um dos exemplos e o mesmo planCacheShapeHash
para cada um. Por exemplo:
queryShapeHash: 'AB8ECADEE8F0EB0F447A30744EB4813AE7E0BFEF523B0870CA10FCBC87F5D8F1' planCacheShapeHash: '48E51110'
Formato de query diferente
Uma query tem uma forma diferente se a query tiver especificações diferentes. Por exemplo, se uma query tiver um filtro diferente, classificar, projeção, namespace ou estágios de pipeline de agregação .
No exemplo da seção anterior, o exemplo classifica pelo campo totalNumber
. Se você alterar a classificação de query de totalNumber
para um campo diferente, a query terá uma forma de query diferente.
Por exemplo, classificar por pizza price
altera a forma de query:
db.pizzaOrders.explain().find( { orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) } } ). sort( { price: 1 } )
Como a forma de query é diferente da forma na seção anterior, a saída explain
tem um queryShapeHash
diferente do exemplo anterior e um planCacheShapeHash
diferente. Por exemplo:
queryShapeHash: 'AC1ECADBE8F1EB0F417A30741AB4813BE7E0BFEF523B0870CA11FCBC87F1A8B2' planCacheShapeHash: '31A52130'
Comportamento
A partir do MongoDB 8.0, adicione configurações de query para formas de query em vez de filtros de índice para coleções. Os filtros de índice estão obsoletos a partir do MongoDB 8.0. As configurações de query têm mais funcionalidades do que os filtros de índice, e os filtros de índice não são persistentes após o desligamento do cluster.
As configurações de query permitem que você use um índice para todas as execuções de uma forma de query em um cluster. Além disso, para evitar que uma operação cause volume de trabalho excessivo no cluster, você pode rejeitar todas as operações associadas a uma forma de query usando um filtro de rejeitamento de operação.
O otimizador de query usa as configurações de query como uma entrada adicional durante o planejamento de query. As configurações de query afetam o plano selecionado para executar uma query que tenha uma forma de query correspondente.
Começar
Para adicionar configurações de consulta para uma forma de query de consulta, utilize
setQuerySettings
.Para excluir configurações de query, utilize
removeQuerySettings
.Para recuperar as configurações de query, use um estágio
$querySettings
em um agregação pipeline.Para bloquear uma forma de query, use um filtro de exclusão de operação.