AWS DynamoDB扫描FilterExpression使用不等于列表中的String

时间:2017-03-13 10:36:40

标签: java amazon-web-services amazon-dynamodb aws-sdk

我有一个ID为String的List列表。我想扫描DynamoDB,并获得一个包含没有这些ID的项目的结果列表。但我无法弄清楚如何键入过滤器表达式。 ReviewId是String类型的主分区键。

Map<String, AttributeValue> eav = new HashMap<>();
eav.put(":idFilter", new AttributeValue().withSS(idFilter));

DynamoDBScanExpression scanExp = new DynamoDBScanExpression()
          .withFilterExpression("ReviewId <> (:idFilter)")
          .withExpressionAttributeValues(eav);

上面的过滤器表达式有效但它仍然总是返回列表中带有id的项目。 我还尝试在in运算符之前和之后添加<>一词。

1 个答案:

答案 0 :(得分:5)

您可以更改过滤器表达式,如下所示,并使用键ExpressionAttributeValues的值填充:reviewId1, :reviewId2, :reviewId3

FilterExpression: "NOT ReviewId in (:reviewId1, :reviewId2, :reviewId3)"

注意: -

不幸的是,您不能将idFilter保留为SET或LIST以与DynamoDB的String属性进行比较。