ruby - AWS ruby​​ sdk v2 - dynamodb 查询

标签 ruby amazon-web-services amazon-dynamodb

我在 DynamoDB 中有一个散列(字符串)和范围(数字)表。我正在尝试使用 ruby​​ SDK v2.0.30 运行查询,但不断收到以下错误:

aws-sdk-core-2.0.30/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': 一个或多个参数值无效:条件参数类型与模式不匹配类型(Aws::DynamoDB::Errors::ValidationException)

这是我的代码:

gem 'aws-sdk', '~> 2'
require 'aws-sdk'

dynamodb = Aws::DynamoDB::Client.new(region: 'eu-west-1', credentials: creds)
resp = dynamodb.query(
      table_name: "TEST_TABLE",
      key_conditions: {
        'ID' => {
          comparison_operator: 'EQ',
          attribute_value_list: [{ 's' => 'test123' }]
        }
      })

我是 ruby​​ 的新手,曾尝试在网上和 AWS 文档上查找,但找不到任何内容。任何帮助将不胜感激。

谢谢

最佳答案

您的错误在于您如何格式化查询表达式中哈希键的值。适用于 Ruby 的 v2 AWS 开发工具包 (aws-sdk gem) 接受所有属性值作为普通 Ruby 值。

可以是:

  • 字符串
  • 数字(整数、 float 、BigDecimal 等)
  • bool 值
  • IO(blob 类型)
  • 集合(数字/字符串)
  • 数组()
  • 哈希(字符串 => )

您不需要提供适用于 Ruby 的 v1 AWS 开发工具包所需的类型提示。

ddb = Aws::DynamoDB::Client.new
ddb.query({
  table_name: 'TEST_TABLE',
  key_conditions: {
    'ID' => {
      comparison_operattor: 'EQ',
      attribute_value_list: ['test-123']      
    }
  }
})

此外,与您的问题没有直接关系,但您可能会发现以下系列博客在使用 aws-sdk gem 中的 DynamoDB 时很有帮助:

关于ruby - AWS ruby​​ sdk v2 - dynamodb 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082901/

相关文章:

ruby-on-rails - form_tag 路由不正确

用于过滤堆栈中引发的所有异常的 Ruby rack 中间件

amazon-web-services - 使用IAM限制对特定Cloudfront发行版的访问

javascript - dynamodb putItem 回调函数不起作用

ruby - 在 Ruby 中初始化

ruby-on-rails - ||之间的差异并内联 if 语句?

amazon-web-services - 如何在使用 Amazon Cognito 进行身份验证时公开访问 AWS AppSync GraphQL API?

amazon-web-services - 将实例注册到 AWS ECS 集群

c# - DynamoDb.net : Adding multiple scan conditions

javascript - Dynamo db Error adding question : { InvalidParameterType: Expected params. Item ['options' ].S 是一个字符串