Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS DynamoDB query not filtering on BOOL value

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?

like image 330
cdub Avatar asked Nov 07 '16 09:11

cdub


1 Answers

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:-

enter image description here

like image 116
notionquest Avatar answered Sep 16 '22 22:09

notionquest