Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Formas de query

Nesta página

  • Exemplos
  • Comportamento
  • Começar
  • Saiba mais

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

  • $queryStats estatísticas da forma de query .

  • os campos e operações também suportados pela forma de query do cache do plano. Exemplos: filter, sort e projection.

  • a maioria dos campos e operandos disponíveis para os comandos find, distinct e aggregate . 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 e distinct , 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 e distinct 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.

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" ) }
] )

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'

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'

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.

Voltar

Planos de query