Como Consultar o DynamoDB em Ordem Decrescente
Por padrão, um Query do DynamoDB retorna itens em ordem crescente de chave de
ordenação. Mas a maioria dos padrões de acesso do tipo "me dê os mais recentes" quer o
oposto — os mais novos primeiro. O botão é um único booleano no Query:
ScanIndexForward. Defina-o como false e a mesma consulta lê a partição ao
contrário.
É um único parâmetro, mas confunde as pessoas porque é fácil de misturar com ordenar os resultados depois (o que o DynamoDB não faz) e porque o nome se lê ao contrário do que ele controla.
Como consultar o DynamoDB em ordem decrescente?
Defina ScanIndexForward=false no Query. Por padrão, o DynamoDB retorna itens em ordem crescente de chave de ordenação; inverter esse único booleano faz a consulta percorrer a partição ao contrário, retornando os resultados mais novos primeiro quando sua chave de ordenação é um timestamp ou sequência. Isso altera apenas a ordenação, não quais itens correspondem, e leituras inversas custam exatamente o mesmo que as diretas.
ScanIndexForward=true(padrão) → ordem crescente de chave de ordenação.ScanIndexForward=false→ ordem decrescente — os mais novos primeiro quando sua chave de ordenação é um timestamp ou uma sequência.- Afeta apenas a ordenação, não quais itens correspondem — quem decide isso ainda é a key condition.
- É de graça. A ordem invertida custa o mesmo que a direta; o DynamoDB lê a ordem armazenada da partição de qualquer jeito.
- Use
Limitjunto para obter "os N mais recentes" em uma única leitura barata.
O problema: "me mostre os mais recentes primeiro"
Digamos que você opere um placar multiplayer e armazene os eventos de pontuação de cada jogador sob uma única chave de partição, ordenados por um timestamp crescente:
PK: GAME#42 SK: SCORE#2026-06-27T10:00:00Z points
PK: GAME#42 SK: SCORE#2026-06-27T10:05:00Z points
PK: GAME#42 SK: SCORE#2026-06-27T10:09:00Z pointsO painel precisa das pontuações mais recentes. Um Query simples em GAME#42 as
retorna das mais antigas primeiro, então você ficaria tentado a ler tudo e inverter no
seu app — um desperdício, e quebrado no instante em que você adiciona Limit. O DynamoDB
consegue devolvê-las já com as mais novas primeiro.
Como o ScanIndexForward funciona
Os itens de uma partição são armazenados fisicamente ordenados pela chave de
ordenação. Um Query percorre essa ordem; o ScanIndexForward apenas escolhe a
direção do percurso:
true(padrão) — começa na menor chave de ordenação e sobe (crescente).false— começa na maior chave de ordenação e desce (decrescente).
Crucialmente, isso é uma propriedade da leitura, não da tabela — os mesmos itens, a
mesma key condition, só que invertidos. E como o DynamoDB está apenas escolhendo uma
direção sobre dados já ordenados, as leituras decrescentes são
exatamente tão baratas
quanto as crescentes. Combine com Limit=10 e você obtém "os 10 eventos de pontuação
mais recentes" em uma única Query de custo mínimo.
Uma sutileza: ao paginar para trás num conjunto de resultados decrescente, o cursor
LastEvaluatedKey/ExclusiveStartKey ainda funciona — apenas mantenha
ScanIndexForward=false consistente em cada página da mesma varredura, ou a direção do
cursor e a ordem vão discordar.
Montando a consulta no DynoTable
Para montar a própria key condition (e ver os mapas de nomes/valores de atributos correspondentes), use o construtor de expressões do DynamoDB.
No DynoTable, você lê uma aba por uma chave escolhida e define a direção da ordenação na
aba com um controle — sem precisar escrever ScanIndexForward à mão. Inverta-o para
pré-visualizar os resultados com os mais novos primeiro.

Armadilhas e próximos passos
ScanIndexForwardinverte, não ordena por um atributo arbitrário. A ordem é sempre pela chave de ordenação — para ordenar por outra coisa, você precisa daquele atributo como chave de ordenação (muitas vezes via um GSI).- Não leia-tudo-e-inverta no seu app — defina a flag e adicione
Limit. - Mantenha a flag consistente ao paginar uma varredura de várias páginas, ou o cursor briga com a ordem.
- Quer os mais novos primeiro de forma numérica? Garanta que a chave de ordenação ordena corretamente — preencha os números com zeros à esquerda para que a ordem lexicográfica corresponda.
- Relacionado: estratégias de chave de ordenação e paginação.
Quer inverter a ordem dos resultados sem mexer nos parâmetros da API? Baixe o DynoTable e consulte suas tabelas diretamente.


