Tengo una tabla de usuarios que se creó con la GUI y se me dio una clave de partición del correo electrónico y es una cadena. Luego utilicé aws lambda para hacer un putItem que tenía:
email (string) test@testing.com deleted (BOOL) false
Esto funcionó bien. Luego traté de consultarlo con lambda usando los siguientes parámetros y consulta:
var params = { TableName : 'Users', KeyConditionExpression : 'email = :email', FilterExpression : 'deleted = :deleted', ExpressionAttributeValues : { ':email' : email, ':deleted': { BOOL: false } } }; docClient.query(params, function(err, data) { if (err) return fn(err); else { console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); } });
Esto siempre devuelve 0 elementos cuando busco email = test@testing.com y dejo los borrados como falsos. Si elimino la expresión de filtro de eliminado, obtengo una devolución de artículo, ¿por qué no funciona BOOL = false o debo usar otra cosa?
Aquí está el código para filtrar los datos de BOOL
. No es necesario codificar como abajo, ya que DynamoDB lo interpreta como valor BOOL dentro del tipo de datos MAP.
{ BOOL: false }
Cambiar a:-
':deleted' : false
Código:-
var table = "users"; var params = { TableName : table, KeyConditionExpression : 'email = :email', FilterExpression: 'deleted = :deleted', ExpressionAttributeValues : { ':email' : 'abc@gmail.com', ':deleted' : false } }; docClient.query(params, function(err, data) { if (err) { console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); } });
Mi artículo de DynamoDB que tiene datos BOOL: –