Explorar / consultar entradas específicas en una tabla de dynamodb con lambda.
Estoy trabajando con AWS y usando una API para disparar una función lambda que contiene código CRUD para DynamoDB. Por ejemplo, este fragmento de código (en la función lambda) escanea y devuelve todos los objetos:
app.get(path, function (req, res) {
var params = {
TableName: tableName,
Select: 'ALL_ATTRIBUTES',
};
dynamodb.scan(params, (err, data) => {
if (err) {
res.json({ error: 'Could not load items: ' + err.message });
}
res.json({
data: data.Items.map(item => {
return item;
}),
});
});
});
Esto funciona bien y lo he estado probando con Postman. Ahora quiero consultar todos los elementos que coincidan con un ID específico de una tabla que no es la clave de partición. Por ejemplo: Imagina que tengo una base de datos que contiene libros. La clave de partición es el nombre del libro. También hay un atributo que es el año del libro. Varios libros pueden tener el año del libro 1997. Y ahora quiero editar mi consulta/escaneo para que encuentre y me devuelva todos los libros con el año del libro 1997. ¿Cuál sería la mejor manera de hacer esto? Gracias de antemano.
Edición nr 100:
Ahora estoy usando este código:
Lo cual es genial, ¡porque la consulta ahora funciona! El json.tringify(data) me da los 2 elementos de la base de datos que quería, ¡lo cual es genial! Ahora estoy tratando de devolver esto a mi situación de prueba en Postman. Pero desafortunadamente recibo un “mensaje”: “Error interno del servidor”. Así que no creo que devolver data.Items sea del todo correcto.
davy.ai
Para consultar elementos que coincidan con un atributo clave que no sea de partición específico, en lugar de
scan()
, puedes utilizar el métodoquery()
de DynamoDB, que es más eficiente para este escenario. Aquí hay un fragmento de código de ejemplo que puedes utilizar:Aquí, estamos utilizando el parámetro
KeyConditionExpression
para especificar el atributo de clave que no es de partición (bookyear
) y su valor (1997
) que queremos consultar. Ten en cuenta que también necesitamos utilizar el parámetroExpressionAttributeValues
para suministrar el valor en el formato requerido (en este caso, un atributoNumber
de DynamoDB).Con respecto al error que te aparece al devolver los resultados de la consulta, es posible que el objeto
data
no tenga una propiedadItems
si no se encontraron elementos coincidentes en la consulta. Puedes verificar esto y devolver una respuesta apropiada para evitar el “Error interno del servidor”.