planCacheSetFilter
Definição
planCacheSetFilter
Defina umfiltro de índice para uma collection. Se já existir um filtro de índice para a forma de query, o comando substituirá o filtro de índice anterior.
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>, indexes: [ <index1>, <index2>, ...], comment: <any> } )
O comando planCacheSetFilter
tem o seguinte campo:
Campo | Tipo | Descrição |
---|---|---|
| string | O nome da collection. |
| documento | O predicado de query associado ao filtro de índice. Juntamente com o Somente a estrutura do predicado, incluindo os nomes dos campos, é significativa; os valores no predicado de query são insignificantes. Dessa forma, os predicados de query abrangem queries semelhantes que diferem apenas nos valores. |
| documento | Opcional. A classificação associada ao filtro. Juntamente com o |
| documento | Opcional. A projeção associada ao filtro. Juntamente com o |
| array | Uma array de filtros de índice para a forma de query especificada. Especifique os filtros de índice como:
Como o otimizador de query escolhe entre a verificação da collection e esses índices, se os índices especificados forem inexistentes ou ocultos, o otimizador escolherá a verificação da collection. Em casos de vários índices com o mesmo padrão de chave, você deve especificar o índice por nome. |
| 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; no entanto, você também pode limpar filtros de índice existentes usando 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 com apenas predicado
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, verifique o campo indexFilterSet
do método db.collection.explain()
ou cursor.explain()
.
Definir filtro na forma de query 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, o otimizador de query considerará somente planos indexados que utilizam o índice { item: 1, order_date: 1, quantity: 1 }
.