planCacheSetFilter
Definição
planCacheSetFilter
Defina umfiltro de índice para uma collection. Se já existir um filtro de índice para o plano cache forma de query, o comando substituirá o filtro de índice anterior.
Configurações de query
Novidades na versão 8.0.
A partir do MongoDB 8.0, use configurações de query em vez de adicionar filtros de índice. 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. Além disso, os filtros de índice não são persistentes e você não pode criar facilmente filtros de índice para todos os nós de cluster. Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings
.
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.
As configurações se aplicam à forma de query em todo o cluster. O cluster mantém as configurações após o desligamento.
Você pode adicionar configurações de consulta para os comandos find
, distinct
e aggregate
.
Para remover as configurações de query, use removeQuerySettings
. Para obter as configurações de consulta, use um estágio $querySettings
em um pipeline de agregação .
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Este comando não é suportado em clusters M0, M2 e M5 . Para obter mais informações, consulte Comandos não suportados.
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
Sintaxe
O comando tem a seguinte sintaxe:
db.runCommand( { planCacheSetFilter: <collection>, query: <query>, sort: <sort>, projection: <projection>, collation: { <collation> }, indexes: [ <index1>, <index2>, ...], comment: <any> } )
A forma de query do cache do plano para o filtro de índice é a combinação de:
query
sort
projection
collation
Campos de comando
O comando tem os seguintes campos:
Campo | Tipo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | O nome da collection para o filtro de índice. | ||||||||||
| documento | O predicado de query para o filtro de índice. Somente a estrutura do predicado, incluindo os nomes dos campos, é usada no filtro de índice. Os valores de campo no predicado de query não são utilizados. Portanto, o predicado de query em um filtro de índice é usado por queries semelhantes que diferem apenas nos valores de campo. | ||||||||||
| documento | Opcional. A classificação do filtro de índice. | ||||||||||
| documento | Opcional. A projeção do filtro de índice. | ||||||||||
| documento | Especifica o agrupamento a ser usado para a operação. A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento. A opção de agrupamento tem a seguinte sintaxe:
Ao especificar agrupamento, o campo Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão (consulte Se nenhum agrupamento for especificado para a coleção ou para as operações, o MongoDB usa a comparação binária simples usada nas versões anteriores para comparações de strings. Você não pode especificar vários agrupamentos para uma operação. Por exemplo, você não pode especificar agrupamentos diferentes por campo ou, se estiver realizando uma busca com uma classificação, não poderá usar um agrupamento para a busca e outro para a classificação. Iniciando no MongoDB 6.0, um filtro de índice utiliza a coleção definida anteriormente utilizando o comando A partir do MongoDB 8.0, use configurações de query em vez de adicionar filtros de índice. 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. Além disso, os filtros de índice não são persistentes e você não pode criar facilmente filtros de índice para todos os nós de cluster. Para adicionar configurações de query e explorar exemplos, consulte | ||||||||||
| array | Uma array de filtros de índice para a forma de query do cache do plano especificado. Especifique os filtros de índice como uma destas arrays:
O otimizador de query usa uma varredura de collection ou as arrays de índice para o plano de query. Se os índices especificados não existirem ou estiverem ocultos , o otimizador utilizará uma varredura de collection. Para vários índices com o mesmo padrão de chave, você deve especificar o índice como uma array de nomes. | ||||||||||
| any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). |
Os filtros de índice existem apenas durante o processo do servidor e não persistem após o desligamento. Para limpar os filtros de índice, utilize o comando planCacheClearFilters
.
Acesso necessário
O usuário deve ter acesso que inclua a ação planCacheIndexFilter
.
Exemplos
Definir filtro na forma de query do cache do plano contendo apenas predicados
O exemplo a seguir cria um filtro de índice na coleção orders
de modo que, para consultas que consistem apenas em uma correspondência de igualdade no campo status
sem nenhuma projeção e classificação, o otimizador de consulta avalia somente os dois índices especificados e a verificação da coleção para o plano vencedor:
db.runCommand( { planCacheSetFilter: "orders", query: { status: "A" }, indexes: [ { cust_id: 1, status: 1 }, { status: 1, order_date: -1 } ] } )
No predicado de query, somente a estrutura do predicado, incluindo os nomes dos campos, são significantes; os valores são insignificantes. Dessa forma, o filtro criado se aplica às seguintes operações:
db.orders.find( { status: "D" } ) db.orders.find( { status: "P" } )
Para ver se o MongoDB aplicará um filtro de índice para uma forma de query do cache do plano, marque o campo indexFilterSet
do método db.collection.explain()
ou cursor.explain()
.
Definir filtro na forma de query do cache do plano consistindo em predicado, projeção e classificação
O exemplo a seguir cria um filtro de índice para a collection orders
. O filtro se aplica a query cujo predicado é uma correspondência de igualdade no campo item
, onde somente o campo quantity
é projetado e uma classificação ascendente por order_date
é especificada.
db.runCommand( { planCacheSetFilter: "orders", query: { item: "ABC" }, projection: { quantity: 1, _id: 0 }, sort: { order_date: 1 }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
Para a forma de query do cache do plano, o otimizador de query de query considerará apenas os planos indexados que usam o índice { item: 1, order_date: 1, quantity: 1 }
.
Definir filtro na forma de query do cache do plano consistindo em predicado e agrupamento
O exemplo a seguir cria um filtro de índice para a collection orders
. O filtro se aplica a query cujo predicado é uma correspondência de igualdade no campo item
e no agrupamento en_US
(inglês dos estados unidos).
db.runCommand( { planCacheSetFilter: "orders", query: { item: "Movie" }, collation: { locale: "en_US" }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
Para a forma de query do cache do plano, o otimizador de query de query usa somente planos indexados que usam o índice { item: 1, order_date: 1, quantity: 1 }
.
Iniciando no MongoDB 6.0, um filtro de índice utiliza a coleção definida anteriormente utilizando o comando planCacheSetFilter
.
A partir do MongoDB 8.0, use configurações de query em vez de adicionar filtros de índice. 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. Além disso, os filtros de índice não são persistentes e você não pode criar facilmente filtros de índice para todos os nós de cluster. Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings
.