2017-12-07 6 views
0

私は、API Gatewayを使用してDynamoDBに簡単なAPIを構築しています。私はソートキーに対して条件付きクエリーを実行しようとしていますが、 "クエリーキー条件付きサポートされていません"というメッセージが表示され続けます。しかし、私が文書で読んだことは、これが本当にうまくいくはずだと言いました。DynamoDBのソートキーの条件付きクエリが機能していませんか?

私のような何かやろうとしている:

{ 
    "TableName": "testTable", 
    "KeyConditionExpression": "requestTimeEpoch > :since", 
    "ExpressionAttributeValues": { 
     ":since": { 
      #if($input.params('since') != "") 
       "S": "$input.params('since')" 
      #else 
       "S": "1" 
      #end 
     } 
    } 
} 

私はナンバーを使用している場合、誰かがこの問題を持っていたことをどこかで読んので、私が代わりに文字列にそれを切り替えてみました。いずれにせよ、これはうまくいかないでしょうか?

(requestTimeEpochは、ハッシュキーのソート/範囲キーです)

答えて

1

あなたは、独自のソート・キーを使用することはできません。データはパーティション内でのみソートされます。したがって、クエリではパーティションキー(これは等しい演算子でなければなりません)を指定する必要があります。

パーティションキーを使用しない場合は、スキャン操作に切り替える必要があります。スキャンはキー条件を必要としません。

EDIT:キーパーティション(ハッシュ)を持つので、それはあるかもしれない何か

{ 
    "TableName": "testTable", 
    "KeyConditionExpression": "YourHash = :hash and requestTimeEpoch > :since", 
    "ExpressionAttributeValues": { 
     ":since": { 
      #if($input.params('since') != "") 
       "S": "$input.params('since')" 
      #else 
       "S": "1" 
      #end 
     ":hash" : {S: 'yourHashId'} 
     } 
    } 
} 

のような、その後、多くの意味があります

var params = { 
    TableName: "testTable", 
    FilterExpression: "#since > :time", 
    ExpressionAttributeNames: { 
     "#since": "time", 
    }, 
    ExpressionAttributeValues: { 
     ":time": 2017, 
    } 
}; 
+0

[OK]をスキャン、。私は文書を読んでいても、それが内部的にどのように保存されているのか全く分かりませんでした。残念ながら、これは私が期待していたようにAPI Gatewayから直接これを使用することはできません。ラムダ関数を使用する必要があるので、私はその日または月のハッシュキーを使うことができます。これは、マッピングだけを使って直接取得することはできません。 –

関連する問題