I have a users table that was create with the GUI and given a partion key of email and it is a string. I then used aws lambda to do a putItem that had:
email (string) [email protected]
deleted (BOOL) false
This worked fine. I then tried to query it with lambda using the following params and query:
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));
}
});
This always returns 0 items when I search for email = [email protected] and leave the deleted as false. If I remove the filter expression of deleted I get an item return so why doesn't the BOOL = false work or should I use something else?
Here is the code to filter BOOL
data. It is not required to code like below as DynamoDB interpret it as BOOL value inside MAP data type.
{ BOOL: false }
Change to:-
':deleted' : false
Code:-
var table = "users";
var params = {
TableName : table,
KeyConditionExpression : 'email = :email',
FilterExpression: 'deleted = :deleted',
ExpressionAttributeValues : {
':email' : '[email protected]',
':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));
}
});
My DynamoDB item which has BOOL data:-
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With