Go语言 DynamoDB“提供的关键元素与架构错误不匹配”

jdzmm42g  于 2023-04-27  发布在  Go
关注(0)|答案(1)|浏览(96)

我在terraform中定义了dynamodb表:

name                   = "component_table"
  partition_key          = "name"
  partition_key_type     = "S"
  sort_key               = "version"
  billing_mode           = "PAY_PER_REQUEST"
  environment            = "testing"
  aws_region             = "eu-west-1"
  restore_to_latest_time = true
  point_in_time_recovery = true
  extra_attributes = [
    {
      name = "version"
      type = "S"
    },
    {
      name = "team"
      type = "S"
    }
]
local_secondary_index = [
{
  name            = "TeamSecondaryIndex"
  projection_type = "ALL"
  range_key       = "team"
}
]

我已经用aws操作符GetItem查询了它,为了测试的目的,我已经定义了name为abc,但似乎不能像它所说的那样查询GetItem函数

The provided key element does not match the schema error

我运行的函数是这样的:

func (m *Manager) ComponentGetByName(ctx context.Context, name string) (componentModel.Component, error) {

getItemInput := &awsDDB.GetItemInput{
            TableName: &m.cfg.tableName,
            Key: map[string]types.AttributeValue{
                "name": &types.AttributeValueMemberS{
                    Value: name,
                },
            },
        }
        getItemOutput, err := m.Client.GetItem(ctx, getItemInput)
return getItemOutput
}

我省略了一些细节,例如将getItemOutput转换为保密的组件模型。我想知道为什么会发生这种情况以及如何解决它?欢迎讨论。谢谢!

iswrvxsc

iswrvxsc1#

问题是你试图只使用分区键值来执行GetItem。要执行GetItem,你必须提供完整的主键,即分区和排序键值。在你的例子中,需要nameversion
如果你只知道分区密钥,你必须执行Query操作。
必须提供分区键属性的名称和该属性的单个值。查询将返回具有该分区键值的所有项

相关问题