根据TTL过滤记录

时间:2021-03-02 01:38:31

标签: amazon-dynamodb dynamodb-queries

在我的 DynamoDb 表中,我将 TTL 列名称设置为“ttl”。我正在使用下面提到的 Java 代码在 ttl 上应用过滤器,但出现异常。 “无效的 FilterExpression:属性名称是保留关键字;保留关键字:ttl(服务:AmazonDynamoDBv2;”还有其他方法可以对 TTL 列应用过滤器吗?

            Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
            String key = ":ttlvalue";
            expressionAttributeValues.put(key, 1614643859);
            query.withFilterExpression("ttl" + "=" + key);
            query.withValueMap(expressionAttributeValues);

1 个答案:

答案 0 :(得分:2)

要在 Dynamo 表达式中使用保留关键字,我们需要使用占位符字符串并在 NameMap 中替换该字符串

所以,而不是

.withFilterExpression("ttl = :v_ttl")

我们可以使用

.withFilterExpression("#ttl_key = :v_ttl")

.withNameMap(new NameMap().with("#ttl_key","ttl"))

#ttl_key替换ttl

这是一个关于表的完整示例,分区键为“pk”和 ttl 列。

Table table = dynamodB.getTable("test");        
QuerySpec querySpec = new QuerySpec()
        .withKeyConditionExpression("pk = :v_pk")
        .withFilterExpression("#ttl_key = :v_ttl")
        .withNameMap(new NameMap().with("#ttl_key","ttl"))
        .withValueMap(new ValueMap().withString(":v_pk", "5").withNumber(":v_ttl", 100));

ItemCollection<QueryOutcome> items = table.query(querySpec);
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next().toJSONPretty());
}