Home Articles

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

Asked
Viewed 1966 times
4

我有一个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 Answer

  • 5

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

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

    Note:-

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

Related