Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Índice parcial

Modo de foco
Índice parcial - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Um índice parcial indexa documentos em uma coleção que atende a um critério de filtro especificado. O recurso parcial de índice é aceito em clusters baseados em instância do Amazon DocumentDB 5.0.

Crie um índice parcial

Para criar um índice parcial, use o método createIndex() com a opção partialFilterExpression. Por exemplo, a operação a seguir cria um índice composto exclusivo na coleção de pedidos que indexa documentos com um OrderID e com o campo isDelivered verdadeiro:

db.orders.createIndex( {"category": 1, "CustomerId": 1, "OrderId": 1}, {"unique": true, "partialFilterExpression": {"$and": [ {"OrderId": {"$exists": true}}, {"isDelivered": {"$eq": false}} ]} } )

Operadores compatíveis

  • $eq

  • $exists

  • $and (somente no nível superior)

  • $gt/$gte/$lt/$lte (a varredura de índice só é usada quando o filtro, predicado na consulta, corresponde exatamente à expressão do filtro parcial) (consulte Limitações)

Consultar usando um índice parcial

Os seguintes padrões de consulta são possíveis usando índices parciais:

  • O predicado da consulta corresponde exatamente à expressão do filtro de índice parcial:

    db.orders.find({"$and": [ {"OrderId": {"$exists": true}}, {"isDelivered": {"$eq": false}} ]}).explain()
  • O resultado esperado do filtro de consulta é um subconjunto lógico do filtro parcial:

    db.orders.find({"$and": [ {"OrderId": {"$exists": true}}, {"isDelivered": {"$eq": false}}, {"OrderAmount": {"$eq": "5"}} ]}).explain()
  • Um subpredicado da consulta pode ser usado em conjunto com outros índices:

    db.orders.createIndex({"anotherIndex":1}) db.orders.find({ "$or": [ {"$and": [ {"OrderId": {"$exists": true}}, {"isDelivered": {"$eq": false}} ]}, {"anotherIndex": {"$eq": 5}} ] }).explain()
nota

Um planejador de consultas pode optar por usar uma varredura de coleção em vez de uma varredura de índice, se for eficiente fazer isso. Isso geralmente é visto em coleções ou consultas muito pequenas que retornariam uma grande parte de uma coleção.

Funcionalidades parciais de índice

Listar índices parciais

Liste índices parciais partialFilterExpression usando a getIndex operação. Por exemplo, a operação getIndex emitida lista índices parciais com os campos key, name e partialFilterExpressions:

db.orders.getIndexes()

Este exemplo retorna a saída a seguir:

[ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "ecommerceApp.orders" }, { "v" : 4, "unique" : true, "key" : { "category" : 1, "" : 1, "CustomerId" : 1, "OrderId" : 1 }, "name" : "category_1_CustID_1_OrderId_1", "ns" : "ecommerceApp.orders", "partialFilterExpression" : { "$and" : [ {"OrderId": {"$exists": true}}, {"isDelivered": {"$eq": false}} ] } } ]

Expressão múltipla de filtro parcial na mesma chave:ordem

Diferentes índices parciais podem ser criados para as mesmas combinações de campos (chave:ordem). Esses índices devem ter nomes diferentes.

db.orders.createIndex( {"OrderId":1}, { name:"firstPartialIndex", partialFilterExpression:{"OrderId":{"$exists": true}} } )
db.orders.createIndex( {"OrderId":1}, { name:"secondPartialIndex", partialFilterExpression:{"OrderId":{"$gt": 1000}} } )

Execute a operação getIndexes para listar todos os índices na coleção:

db.orders.getIndexes()

Este exemplo retorna a saída a seguir:

[ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "ecommerceApp.orders" }, { "v" : 4, "key" : { "OrderId" : 1 }, "name" : "firstPartialIndex", "ns" : "ecommerceApp.orders", "partialFilterExpression" : {"OrderId":{"$exists": true}} }, { "v" : 4, "key" : { "OrderId" : 1 }, "name" : "secondPartialIndex", "ns" : "ecommerceApp.orders", "partialFilterExpression" : {"OrderId":{"$gt": 1000}} } ]
Importante

Os nomes dos índices devem ser diferentes e devem ser excluídos somente pelo nome.

Índices com propriedades parciais e TTL

Você também pode criar índices com propriedades parciais e TTL especificando as opções partialFilterExpression e expireAfterSeconds durante a criação do índice. Isso permite que você forneça mais controle sobre quais documentos agora são removidos de uma coleção.

Por exemplo, você pode ter um índice TTL que identifica documentos a serem excluídos após um determinado período de tempo. Agora você pode fornecer condições adicionais sobre quando excluir documentos usando a opção de índice parcial:

db.orders.createIndex( { "OrderTimestamp": 1 }, { expireAfterSeconds: 3600 , partialFilterExpression: { "isDelivered": { $eq: true } } } )

Este exemplo retorna a saída a seguir:

{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1, "operationTime" : Timestamp(1234567890, 1) }

Execute a operação getIndexes para listar os índices presentes na coleção:

db.orders.getIndexes() [ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.orders" }

Este exemplo retorna a saída a seguir:

[ { "v": 4, "key": { "_id": 1 }, "name": "_id_", "ns": "ecommerceApp.orders" }, { "v": 4, "key": { "OrderTimestamp": 1 }, "name": "OrderTimestamp_1", "ns": "ecommerceApp.orders", "partialFilterExpression": { "isDelivered": { "$eq": true } }, "expireAfterSeconds": 3600 } ]

Limitações parciais do índice

As seguintes limitações se aplicam ao recurso de índice parcial:

  • As consultas de desigualdade no Amazon DocumentDB só usarão um índice parcial quando o predicado do filtro de consulta corresponder exatamente a partialFilterExpression e for do mesmo tipo de dados.

    nota

    Nem mesmo $hint pode ser usado para forçar o IXSCAN no caso acima.

    No exemplo a seguir, partialFilterExpression é aplicado somente a field1, mas não a field2:

    db.orders.createIndex( {"OrderAmount": 1}, {"partialFilterExpression": { OrderAmount : {"$gt" : 5}}} ) db.orders.find({OrderAmount : {"$gt" : 5}}) // Will use partial index db.orders.find({OrderAmount : {"$gt" : 6}}) // Will not use partial index db.orders.find({OrderAmount : {"$gt" : Decimal128(5.00)}}) // Will not use partial index
  • Um partialFilterExpression com operadores de matriz não é compatível. A operação a seguir gerará um erro:

    db.orders.createIndex( {"CustomerId":1}, {'partialFilterExpression': {'OrderId': {'$eq': [1000, 1001, 1002]}}} )
  • Os seguintes operadores não são suportados no partialFilterExpression campo:

    • $all (operador de matriz)

    • $mod (operador de matriz)

    • $or

    • $xor

    • $not

    • $nor

  • O tipo de dados da expressão do filtro e do filtro deve ser o mesmo.

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.