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