我有一个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
运算符之前和之后添加<>
一词。
答案 0 :(得分:5)
您可以更改过滤器表达式,如下所示,并使用键ExpressionAttributeValues
的值填充:reviewId1, :reviewId2, :reviewId3
。
FilterExpression: "NOT ReviewId in (:reviewId1, :reviewId2, :reviewId3)"
注意: - 强>
不幸的是,您不能将idFilter
保留为SET或LIST以与DynamoDB的String属性进行比较。