AWS DynamoDB 查询不过滤 BOOL 值

cdu*_*dub 4 amazon-web-services node.js amazon-dynamodb aws-lambda

我有一个用 GUI 创建的用户表,并给出了电子邮件的分区键,它是一个字符串。然后我使用 aws lambda 来做一个 putItem,它有:

email (string) test@testing.com
deleted (BOOL) false
Run Code Online (Sandbox Code Playgroud)

这工作得很好。然后我尝试使用以下参数和查询使用 lambda 查询它:

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));
    }
});
Run Code Online (Sandbox Code Playgroud)

当我搜索 email = test@testing.com 并将删除的保留为 false 时,这总是返回 0 个项目。如果我删除了已删除的过滤器表达式,我会得到一个项目返回,那么为什么 BOOL = false 不起作用或者我应该使用其他东西?

not*_*est 6

这是过滤BOOL数据的代码。不需要像下面这样编码,因为 DynamoDB 将其解释为 MAP 数据类型内的 BOOL 值。

{ BOOL: false        }
Run Code Online (Sandbox Code Playgroud)

改成:-

':deleted' :  false
Run Code Online (Sandbox Code Playgroud)

代码:-

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));
    }
});
Run Code Online (Sandbox Code Playgroud)

我的 DynamoDB 项目具有 BOOL 数据:-

在此处输入图片说明