補足情報(FW/ツールのバージョンなど)
- serverless framework
- AWS
- DynamoDB
- Ruby2.5.0
前提・実現したいこと
aws-recordを使って、RubyでDynamoDBを操作しているのですが、
scanで条件付きでレコードを取得するということが出来ません。
取得の条件としては、processed
がfalse
のレコードを全件取得したいというものです
いくつかレコードを挿入済みです。
node.jsでは以下のようにして実現することが出来ました。
js
1AWS.config.endpoint = new AWS.Endpoint('http://localhost:8000'); 2var dynamodb = new AWS.DynamoDB(); 3var params = { 4 TableName: 'transactions', 5 FilterExpression: "#p = :val", 6 ExpressionAttributeNames: {"#p": "processed"}, 7 ExpressionAttributeValues: {":val": {"BOOL": false}} 8}; 9 10dynamodb.scan(params, function(err, data){ 11 if(err){ 12 console.log(err); 13 } else { 14 data.Items.forEach(function(d, i){ 15 console.log(d.id); 16 }); 17 } 18});
該当のソースコード
Rubyで以下のようにすると全件取得出来ます。
rb
1require 'aws-record' 2 3class Transaction 4 include Aws::Record 5 set_table_name "hoges" 6 7 string_attr :id, hash_key: true 8 boolean_attr :processed 9 10 local_client = Aws::DynamoDB::Client.new(region: "localhost", endpoint: 'http://localhost:8000',) 11 self.configure_client(client: local_client) 12end 13 14scan = Transaction.scan 15 16scan.each do |r| 17 puts r.id 18end
上記だと全件取得出来るのですが、以下だと{}
が返却されます。
rb
1require 'aws-record' 2 3class Transaction 4 include Aws::Record 5 set_table_name "hoges" 6 7 string_attr :id, hash_key: true 8 boolean_attr :processed 9 10 local_client = Aws::DynamoDB::Client.new(region: "localhost", endpoint: 'http://localhost:8000',) 11 self.configure_client(client: local_client) 12end 13 14scan = Transaction.scan( 15 expression_attribute_names: {"#p": "processed"}, 16 expression_attribute_values: {":val": {"BOOL": false00}}, 17 filter_expression: "#p = :val" 18) 19 20puts scan.to_h # {} 21 22scan.each do |r| 23 puts r.id 24end
Rubyで上記のように条件指定でレコードを取得出来る方法を知っている方はいますでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。