AWS DynamoDB query not filtering on BOOL value

狂风中的少年 提交于 2019-12-23 01:52:11

问题


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) test@testing.com
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 = test@testing.com 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?


回答1:


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' : '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));
    }
});

My DynamoDB item which has BOOL data:-



来源:https://stackoverflow.com/questions/40461910/aws-dynamodb-query-not-filtering-on-bool-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!