2017-03-13 33 views
4

IDがStringであるListを持っています。私は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

フィルタ式を次のように変更し、ExpressionAttributeValuesにキー:reviewId1, :reviewId2, :reviewId3の値を入力できます。

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

注: -

残念ながら、あなたは、DynamoDBののString属性と比較するSETまたはLISTとしてidFilterを維持することはできません。

+0

これはすばらしい情報です。なぜAWSドキュメントには記載されていないのでしょうか。とてもうるさい。 – rtconner

関連する問題