我正在尝试获取属于特定用户名的宠物的列表。
表格设计(PetTable):
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开头。
期望查询应返回2个条目,但不返回任何内容。不知道错误在哪里。任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
我试图重现您的架构并对其进行尽可能多的测试。对我来说很好
[(0, 'a'), (1, 'b'), (2, 'c')]
请确保在为type Pet {
username: String!
petID: ID!
}
type Query {
getPets(username: String!): [Pet]
}
schema {
query: Query
}
(用户名为PetTable
,petID为PK
)创建资源时
为查询附加解析器
DynamoDB
测试结果
答案 1 :(得分:1)
您的响应映射模板是什么?
您可能保留了默认的映射模板,该模板将返回结果列表,而不是将查询结果从DynamoDB映射到您的PetConnection
类型。
我复制了您的API,并使用相同的GraphQL查询获得了结果。
这是我的响应模板:
#set($petConnection = { 'pets': $ctx.result.items })
$util.toJson($petConnection)
结果:
{
"data": {
"getPets": {
"pets": [
{
"petId": "petId:1234"
},
{
"petId": "petId:12345"
}
]
}
}
}
注意:一种调试应用程序的好方法是从API设置页面启用日志。 请参阅下面的如何启用日志。启用后,转到“查询”窗格,勾选“日志”复选框并执行GraphQL查询。您的应用程序日志应出现在控制台中。