问题
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