DynamoDB java过滤器列表 - 示例

时间:2015-01-13 18:39:15

标签: java amazon-dynamodb

我目前的架构如下:

  • userId :hashKey
  • 日期:range-key
  • 标签:字符串列表

我正在尝试运行一个查询,该查询获取带有hash-key,range-key和一个或多个特定标签字符串的项目。例如:user(123),自2015年1月13日起,标签(重要,有趣)

根据我的理解,DynamoDB最多可以提供2个索引(全局或本地),因此我需要使用过滤器。

运行以下代码仅在标签完全相同时才有效,而不是列表中的一个项目。

List <String>labels=new ArrayList<String>();
labels.add("fun");
labels.add("important");
Map<String,AttributeValue> expressionAttributeValues=new HashMap<>();
expressionAttributeValues.put(":pr", new AttributeValue().withSS(labels));
queryRequest.withFilterExpression("labels IN (:pr)");
queryRequest.withExpressionAttributeValues(expressionAttributeValues);

您能举例说明如何过滤列表属性(使用SS)吗?

2 个答案:

答案 0 :(得分:2)

请尝试使用以下语法。它对我有用。

expressionAttributeValues.put(":pr", new AttributeValue().withS(labels));
queryRequest.withFilterExpression("contains(labels, :pr"));

答案 1 :(得分:0)

如果您还没有找到解决方案,再提一个建议。在 IN 子句中将 List<String> 作为逗号分隔的字符串值传递,这将起作用。