我有一个用户表,该表由电子邮件,电话等组成,我想根据记录的电子邮件或电话值(而不是#Id)来查询记录。没有足够的知识来做这件事-我写了一个这样的模式:
type Query {
...
getUser(id: ID!): User
getUserByEmail(input: GetUserByEmailInput!): User
...
}
input GetUserByEmailInput {
email: String!
}
在针对getUserByEmail(..)的解析程序中,我尝试进行实验,但到目前为止没有任何效果,因此它保持默认状态:
因此,当我在Queries控制台中运行这样的查询时:
query GetUserByEmail {
getUserByEmail(input: {email: "email@email.com"}) {
id
name
email
image
}
}
这将返回如下错误:
{
"data": {
"getUserByEmail": null
},
"errors": [
{
"path": [
"getUserByEmail"
],
"data": null,
"errorType": "DynamoDB:AmazonDynamoDBException",
"errorInfo": null,
"locations": [
{
"line": 41,
"column": 5,
"sourceName": null
}
],
"message": "The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: xxx)"
}
]
}
如何通过非ID字段值查询记录?
答案 0 :(得分:0)
如果在控制台中使用“创建资源”流,它将创建一个类似于以下示例的listUsers查询。请注意,DynamoDb操作将是具有DynamoDb过滤器表达式的Scan,您可以在其中使用任何字段来查询DynamoDb。参见下面的映射模板。
{
"version": "2017-02-28",
"operation": "Scan",
"filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
"limit": $util.defaultIfNull($ctx.args.limit, 20),
"nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
}
您可以在AWS AppSync文档中找到有关扫描和过滤器表达式的更多详细信息:
https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-resolvers.html