Principiante5 min de lectura

Cómo consultar DynamoDB en orden descendente

Por defecto, un Query de DynamoDB devuelve los elementos en orden ascendente de clave de ordenación. Pero la mayoría de los patrones de acceso de "dame lo más reciente" quieren lo contrario — lo más nuevo primero. La palanca es un único booleano en la consulta: ScanIndexForward. Ponlo en false y la misma consulta lee la partición al revés.

Es un solo parámetro, pero hace tropezar a la gente porque es fácil confundirlo con ordenar los resultados después de obtenerlos (cosa que DynamoDB no hace) y porque el nombre se lee al revés de lo que controla.

¿Cómo consulto DynamoDB en orden descendente?

Establece ScanIndexForward=false en el Query. Por defecto DynamoDB devuelve los elementos en orden ascendente de clave de ordenación; cambiar este único booleano lee la partición al revés, dándote resultados con los más nuevos primero cuando tu clave de ordenación es una marca de tiempo o secuencia. Solo cambia el orden, no qué elementos coinciden, y las lecturas inversas cuestan exactamente lo mismo que las directas.

  • ScanIndexForward=true (por defecto) → orden ascendente de clave de ordenación.
  • ScanIndexForward=false → orden descendente — lo más nuevo primero cuando tu clave de ordenación es una marca de tiempo o una secuencia.
  • Solo afecta al orden, no a qué elementos coinciden — eso lo sigue decidiendo la condición de clave.
  • Es gratis. El orden inverso cuesta lo mismo que el directo; DynamoDB lee el orden almacenado de la partición de cualquier forma.
  • Úsalo con Limit para obtener "los N más recientes" en una sola lectura barata.

El problema: "muéstrame lo más reciente primero"

Digamos que gestionas una tabla de clasificación multijugador y guardas los eventos de puntuación de cada jugador bajo una clave de partición, ordenados por una marca de tiempo creciente:

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   points

El panel necesita las puntuaciones más recientes. Un Query simple sobre GAME#42 las devuelve de la más antigua a la más nueva, así que estarías tentado de leerlo todo e invertirlo en tu aplicación — un desperdicio, y se rompe en cuanto añades Limit. DynamoDB puede devolverlas directamente con las más nuevas primero.

Cómo funciona ScanIndexForward

Los elementos de una partición se almacenan físicamente ordenados por clave de ordenación. Un Query recorre ese orden; ScanIndexForward solo elige la dirección del recorrido:

  • true (por defecto) — empieza en la clave de ordenación más baja, sube (ascendente).
  • false — empieza en la clave de ordenación más alta, baja (descendente).

Lo crucial: esto es una propiedad de la lectura, no de la tabla — los mismos elementos, la misma condición de clave, solo invertidos. Y como DynamoDB solo está eligiendo una dirección sobre datos ya ordenados, las lecturas descendentes son exactamente igual de baratas que las ascendentes. Combínalo con Limit=10 y obtienes "los 10 eventos de puntuación más recientes" en una única consulta de coste mínimo.

true por defectofalseQuery GAME#42¿ScanIndexForward?Puntuación más antigua primeroPuntuación más nueva primero

Una sutileza: al paginar hacia atrás por un conjunto de resultados descendente, el cursor LastEvaluatedKey/ExclusiveStartKey sigue funcionando — solo mantén ScanIndexForward=false consistente en cada página del mismo escaneo, o la dirección del cursor y el orden no concordarán.

Construir la consulta en DynoTable

Para ensamblar la condición de clave en sí (y ver los mapas de nombres/valores de atributos correspondientes), usa el constructor de expresiones de DynamoDB.

En DynoTable, lees una pestaña a través de una clave elegida y estableces la dirección de ordenación en la pestaña con un conmutador — sin necesidad de escribir ScanIndexForward a mano. Cámbialo para previsualizar los resultados con los más nuevos primero.

Cambiando una pestaña de consulta a orden descendente (lo más nuevo primero) en DynoTable.
Cambiando una pestaña de consulta a orden descendente (lo más nuevo primero) en DynoTable.

Trampas y próximos pasos

  • ScanIndexForward invierte, no ordena por un atributo arbitrario. El orden es siempre por la clave de ordenación — para ordenar por otra cosa necesitas ese atributo como clave de ordenación (a menudo vía un GSI).
  • No leas-todo-y-luego-inviertas en tu aplicación — pon el flag y añade Limit.
  • Mantén el flag consistente al paginar un escaneo de varias páginas, o el cursor pelea con el orden.
  • ¿Quieres lo más nuevo primero en numérico? Asegúrate de que la clave de ordenación ordena correctamente — rellena los números con ceros para que el orden lexicográfico coincida.
  • Relacionado: estrategias de claves de ordenación y paginación.

¿Quieres invertir el orden de los resultados sin tocar parámetros de la API? Descarga DynoTable y consulta tus tablas directamente.

Actualizado