我目前的架构如下:
我正在尝试运行一个查询,该查询获取带有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)吗?
答案 0 :(得分:2)
请尝试使用以下语法。它对我有用。
expressionAttributeValues.put(":pr", new AttributeValue().withS(labels));
queryRequest.withFilterExpression("contains(labels, :pr"));
答案 1 :(得分:0)
如果您还没有找到解决方案,再提一个建议。在 IN 子句中将 List<String>
作为逗号分隔的字符串值传递,这将起作用。