Después de de una extensa compilación de datos dimos con la respuesta esta duda que tienen ciertos lectores. Te compartimos la respuesta y esperamos serte de mucha apoyo.
Solución:
Si desea obtener los datos de DynamoDB sin usar Hash key valor, necesita usar Scan API
.
Nota: La API de exploración lee todos los elementos de la tabla para obtener los resultados. Entonces, es una operación costosa en DynamoDB.
Enfoque alternativo: Usar GSI
Código de escaneo para el escenario anterior: –
var docClient = new AWS.DynamoDB.DocumentClient();
var params =
TableName: "users",
FilterExpression: "#user_status = :user_status_val",
ExpressionAttributeNames:
"#user_status": "user_status",
,
ExpressionAttributeValues: ":user_status_val": 'somestatus'
;
docClient.scan(params, onScan);
var count = 0;
function onScan(err, data)
if (err)
console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
else
console.log("Scan succeeded.");
data.Items.forEach(function(itemdata)
console.log("Item :", ++count,JSON.stringify(itemdata));
);
// continue scanning if we have more items
if (typeof data.LastEvaluatedKey != "undefined")
console.log("Scanning for more...");
params.ExclusiveStartKey = data.LastEvaluatedKey;
docClient.scan(params, onScan);
Esto es trabajo para mí:
export const scanTable = async (tableName) =>
const params =
TableName: tableName,
;
let scanResults = [];
let items;
do
items = await documentClient.scan(params).promise();
items.Items.forEach((item) => scanResults.push(item));
params.ExclusiveStartKey = items.LastEvaluatedKey;
while(typeof items.LastEvaluatedKey != "undefined");
return scanResults;
;
El ejemplo de documentación de AWS no funcionó para mí. El enfoque de @Hank funcionó.
Usando el controlador dentro de una lambda:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient(
// optional tuning - 50% faster(cold) / 20% faster(hot)
apiVersion: '2012-08-10',
sslEnabled: false,
paramValidation: false,
convertResponseTypes: false
);
const tableName = 'series';
exports.handler = async (event, context, callback) =>
let params = TableName: tableName ;
let scanResults = [];
let items;
do
items = await docClient.scan(params).promise();
items.Items.forEach((item) => scanResults.push(item));
params.ExclusiveStartKey = items.LastEvaluatedKey;
while (typeof items.LastEvaluatedKey != "undefined");
callback(null, scanResults);
;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)