Definição
planCacheSetFilterDefina um filtro 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
Esse comando não é suportado em clusters M0 e Flex. 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:
querysortprojectioncollation
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 | Opcional. Especifica a agrupamento para utilizar 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.