2017-03-13 70 views
4

我有一個ID爲String類型的列表。我想掃描DynamoDB,並獲取沒有這些ID的項目的結果列表。但我無法弄清楚如何輸入過濾器表達式。 ReviewId是String類型的主分區鍵。AWS DynamoDB掃描FilterExpression使用不等於列表中的字符串

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

ReviewId屬性是DynamoDB數據類型SET還是LIST? – notionquest

+0

@notionquest ReviewID是表格中的主分區鍵,它是String類型的。 –

回答

5

您可以按如下所示更改過濾器表達式,並使用:reviewId1, :reviewId2, :reviewId3鍵的值填充ExpressionAttributeValues

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

注: -

不幸的是,你不能保持idFilter set或list與DynamoDB的字符串屬性進行比較。

+0

這是一個很好的信息,爲什麼在AWS文檔中沒有記錄它。很煩人。 – rtconner