appsync dynamodb 不会 return 主分区键

appsync dynamodb won't return primary partition key

提前致谢,因为这可能是一个 101 问题 - 我无法在任何地方找到答案。

我已经设置了我认为是 AppSync 和 DynamoDB 的简单示例。

在 DynamoDB 中,我有一个 categorys table,具有

形式的项目
{
  slug: String!,
  nm: String,
  nmTrail: String,
  ...
}

所以 - 没有 id 字段。 slug 是他的主分区键,不是 null 并且应该是唯一的(在我目前加载的数据中是唯一的)。

我已经根据上述定义设置了一个简化的 AppSync 架构,并且 解析器...

{
  "version": "2017-02-28",
  "operation" : "GetItem",
  "key" : {
    "slug" : { "S" : "${context.arguments.slug}" }
  }
}

查询如

query GoGetOne {
  getCategory(slug: "Wine") {
    nm
  }
}

工作正常 - return 为 categorys 中的正确项目设置 nm 值 - 同样,我可以将 categorys 中的任何其他属性添加到 return 它们(例如 nmTrail)除了 slug.

如果我将 slug(主分区键,不可为 null 的字符串)添加到结果集,那么我会得到 the provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationExceptionDynamoDB:AmazonDynamoDBException

如果我 scan/query/filter DynamoDB 中的 table 一切都很好。

大多数 AWS 示例在 'get one' 示例中使用 id: ID! 字段,并且还要求将其作为 returned 项目。

update1 响应 KD 请求

我的更新突变模式是:

type Mutation {
  putCategory(
    slug: String!,
    nm: String,
    nmTrail: String,
    mainCategorySlug: String,
    mainCategoryNm: String,
    parentCategorySlug: String,
    parentCategoryNm: String
  ): Category
}

没有与之关联的解析器,因此(显然)还没有对 put 任何东西使用突变 - 只是试图 get 开始批量上传数据。

/update1

我错过了什么?

我尽量重现你的 API,它对我有用。

类别 DynamoDB table

架构:

type Query {
    getCategory(slug: String!): Category
}
type Category {
    slug: String
    nm: String
    nmTrail: String
}

Query.getCategory 请求模板上的解析器:

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "slug": $util.dynamodb.toDynamoDBJson($ctx.args.slug),
    }
}

Query.getCategory 响应模板上的解析器:

$util.toJson($ctx.result)

查询:

query GoGetOne {
  getCategory(slug: "Wine") {
    slug
    nm
  }
}

结果

{
  "data": {
    "getCategory": {
      "slug": "Wine",
      "nm": "Wine1-nm"
    }
  }
}