AWS Appsync dynamodb 解析器在排序键中使用 begin_with 表达式不起作用

AWS App Sync dynamodb resolver usage with begin_with expression in Sort Key not working

我正在尝试获取属于特定用户名的宠物列表。

Table设计(宠物Table):

username: partition key
petId: sort key, 

petId 的值是通过连接字符串 "petId:" 和随机 autoId 值生成的。因此,如果 autoId 为 3838380022,则 petId 排序键的值将为 "petId:3838380022"

架构:

type Pet {
    username: String!
    petId: ID!
}

type PetsConnection {
    pets: [Pet]
}

type Query {
    getPets(username: String): PetsConnection
}

解析器:

{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        ## Provide a query expression. **
        "expression": "username = :username and begins_with(petId, :petId)",
        "expressionValues" : {
            ":username" : {
                "S" : "${ctx.args.username}"
            },
            ":petId" : {
                "S" : "pet"
            }

        }
    }
}

查询:

query GetUserPets {
  getPets(username: "test") {
    pets {
      petId
    }
  }
}

查询响应:

{
  "data": {
    "getPets": {
      "pets": null
    }
  }
}

在 Dynamodb 中,我有 2 个整体,其中 petId(SortKey) 以文本 pet 开头。

预期查询应该 return 2 个条目,但它没有 return 任何内容。不确定错误在哪里。任何帮助将不胜感激。谢谢。

我尝试重现您的架构并尽可能多地对其进行测试。对我来说很好

type Pet {
    username: String!
    petID: ID!
}

type Query {
    getPets(username: String!): [Pet]
}

schema {
    query: Query
}

确保在为 PetTable 创建资源时(用户名为 PK,petID 为 sort-key

为查询附加解析器

DynamoDB

检测结果

您的响应映​​射模板是什么? 您可能保留了 returns 结果列表的默认映射模板,而不是将查询结果从 DynamoDB 映射到您的 PetConnection 类型。

我复制了你的 API 并且我能够使用相同的 GraphQL 查询获得结果。

这是我的回复模板

#set($petConnection = { 'pets': $ctx.result.items })
$util.toJson($petConnection)

结果:

{
  "data": {
    "getPets": {
      "pets": [
        {
          "petId": "petId:1234"
        },
        {
          "petId": "petId:12345"
        }
      ]
    }
  }
}

注意:调试应用程序的一种好方法是从 API 设置页面启用日志。 请参阅下文如何启用日志。启用后,前往查询窗格,勾选日志复选框并执行 GraphQL 查询。您的应用程序日志应该出现在控制台中。