2017-10-01 58 views
0

私は 'aws-sdk'、 '〜> 2.6.44'を使用しています。私はactivitiesテーブルを持っています。そこには、ユーザーが実行したすべてのアクティビティが保存されています。dynamodbの範囲キーの範囲を照会する方法は?

params = { 
     table_name: 'activities', # required 
     key_schema: [ # required 
      { 
       attribute_name: 'actor', # required User.1 
       key_type: 'HASH', # required, accepts HASH, RANGE 
      }, 
      { 
       attribute_name: 'created_at', # timestamp 
       key_type: 'RANGE' 
      } 
     ],.... 

私は過去1日に、ユーザによって実行されたすべての活動でこのテーブルを照会します。レンジキーの範囲であったオプションを使用してDynamoDBのテーブルを照会するための正しい方法はどうあるべきか

tableName = 'activities' 
params = { 
    table_name: tableName, 
    key: { 
     actor: 'User.1' 
    }, 
    filter_expression: "created_at BETWEEN (:id1, :id2)", 
    expression_attribute_values: { ":id1" => (Time.now - 1.days).to_i,":id2" => (Time.now + 1.days).to_i}, 
    projection_expression: "actor" 
} 

DynamodbClient.client.get_item(params) 

# Throws ArgumentError: no such member :filter_expression 

AWS documentation siteは、SDKのバージョン3.

tableName = 'activities' 
params = { 
    table_name: tableName, 
    key_condition_expression: "#user = :actor and #time between :start_time and :end_time", 
    expression_attribute_names: { 
     "#user" => 'actor', 
     "#time" => "created_at" 
    }, 
    expression_attribute_values: { 
     actor: 'User.1', 
     ":start_time" => (Time.now - 1.days).to_i, 
     ":end_time" => (Time.now + 1.days).to_i 
    } 
} 

DynamodbClient.client.get_item(params) 
# Throws: ArgumentError: no such member :key_condition_expression 

のマニュアルを持っているように見える私は、フィルタ式で試してみましたか?

答えて

0

特定のレコードを取得しようとしていない場合は、queryを使用する必要があります。クエリ後

が働いた:

tableName = 'activities' 
params = { 
    table_name: tableName, 
    key_condition_expression: "#user = :actor and #time between :start_time and :end_time", 
    expression_attribute_names: { 
     "#user" => 'actor', 
     "#time" => "created_at" 
    }, 
    expression_attribute_values: { 
     ":actor" => 'User.1', 
     ":start_time" => (Time.now - 1.days).to_i, 
     ":end_time" => (Time.now + 1.days).to_i 
    } 
} 

DynamodbClient.client.query(params) 

=> #<struct Aws::DynamoDB::Types::QueryOutput items=[{"actor"=>"User.1", "action"=>"Like", "created_at"=>#<BigDecimal:7fa6418b86e0,'0.150683976E10',18(27)>, "source"=>"FeedSource.661", "body"=>{"id"=>#<BigDecimal:7fa6418b82f8,'0.72E2',9(18)>}, "target"=>"FeedEntry.8419"}], count=1, scanned_count=1, last_evaluated_key=nil, consumed_capacity=nil> 

:)

関連する問題