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 查询。您的应用程序日志应该出现在控制台中。
我正在尝试获取属于特定用户名的宠物列表。
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 查询。您的应用程序日志应该出现在控制台中。