我想使用AWS SDK for Ruby V2通过哈希和范围键查询DynamoDB表 . 以下代码可以工作 .
dynamodb = Aws::DynamoDB::Client.new(region: 'somewhere')
dynamodb.query(
table_name: TABLE_NAME,
key_conditions: {
HASH_KEY_NAME => {
attribute_value_list: ['hoge'],
comparison_operator: 'EQ'
},
RANGE_KEY_NAME => {
attribute_value_list: ['foo'],
comparison_operator: 'EQ'
}
}
)
但是,我想将多个项目设置为范围键条件 .
像这样:
dynamodb = Aws::DynamoDB::Client.new(region: 'somewhere')
dynamodb.query(
table_name: TABLE_NAME,
key_conditions: {
HASH_KEY_NAME => {
attribute_value_list: ['hoge'],
comparison_operator: 'EQ'
},
RANGE_KEY_NAME => {
attribute_value_list: ['foo', 'bar'],
comparison_operator: 'EQ'
}
}
)
此代码返回 lib/ruby/gems/2.2.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/raise_response_errors.rb:15:in
call': One or more parameter values were invalid: Invalid number of argument(s) for the EQ ComparisonOperator (Aws::DynamoDB::Errors::ValidationException)` .
我试过使用 IN
运算符 .
dynamodb = Aws::DynamoDB::Client.new(region: 'somewhere')
dynamodb.query(
table_name: TABLE_NAME,
key_conditions: {
HASH_KEY_NAME => {
attribute_value_list: ['hoge'],
comparison_operator: 'EQ'
},
RANGE_KEY_NAME => {
attribute_value_list: ['foo', 'bar'],
comparison_operator: 'IN'
}
}
)
它返回 lib/ruby/gems/2.2.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/raise_response_errors.rb:15:in
call': Attempted conditional constraint is not an indexable operation (Aws::DynamoDB::Errors::ValidationException)` .
如何通过一个哈希键和多个范围键查询DynamoDB表?
1 回答
Query
操作仅允许Range Key
上的以下运算符:您仍然可以使用
FilterExpression
满足要求:但是,消耗的预配置吞吐量将基于查询返回的结果而不是筛选的结果集 .
另一种选择是通过
BatchGetItem
发送多个GetItem
请求(每个请求具有可能的Range Key
值) . 结果将只包含匹配的记录:资料来源:http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html