未找到字段的值 - AppSync AWS

Posted

技术标签:

【中文标题】未找到字段的值 - AppSync AWS【英文标题】:Value for field not found - AppSync AWS 【发布时间】:2019-12-31 05:40:41 【问题描述】:

我目前正在使用 AppSync 来查询 GSI。我已经能够在 Pipeline Resolver 函数中成功使用此代码块,但是当我尝试在传统解析器中使用它时,我不知道为什么它不起作用。

我目前遇到映射模板错误:


  "data": 
    "units": null
  ,
  "errors": [
    
      "path": [
        "units"
      ],
      "data": null,
      "errorType": "MappingTemplate",
      "errorInfo": null,
      "locations": [
        
          "line": 2,
          "column": 3,
          "sourceName": null
        
      ],
      "message": "Value for field '$[version]' not found."
    
  ]

我尝试在 AWS 文档中搜索,但向 GraphQL 类型添加“版本”不起作用。

我也试过这个(即使我没有使用 S3) AppSync S3Object retrieval 和文档: https://docs.aws.amazon.com/appsync/latest/devguide/troubleshooting-and-common-mistakes.html#mapping-template-errors

这是请求映射模板:

#set($arg=$context.args)

    
    "operation": "Query",
    "index" : "userPK-userSK-index",
    "query": 
        "expression": "userPK = :pk and begins_with(userSK, :sk)",
        "expressionValues": 
            ":pk": "S": "tenant:$arg.tenantId" ,
            ":sk": "S": "school-year:$arg.schoolYear:grades:$arg.gradeId:subject:$arg.subjectId:unit:"
        
    

这是响应映射模板:

$util.toJson($ctx.result.items)

这是执行的 GraphQL 的 sn-p:

query GetUnits
  units(tenantId: "5fc30406-346c-42e2-8083-fda33ab6000a"
schoolYear: "2019-2020"
    gradeId: "c737e341-a0cb-4a16-95de-f3a092049e74"
subjectId: "d0306e25-422d-4628-8fcc-c354b67c932a") 
  id
  indicator 
    id,
    description
  
  competency 
    id,
    description,
    name
  
  description,
  name




这是 GraphQL 模式的 sn-p:


type Unit 
  id: ID!
  competency: Competency
  indicator: Indicator
  name: String!
  description: String
  version: Int


type Competency 
  id: ID
  # grade: Grade
  # subject: Subject
  # schoolYear: String
  name: String
  description: String


type Indicator  
  id: ID!
  description: String

type Query 
  units(
    tenantId: String!
    schoolYear: String!
    gradeId: String!
    subjectId: String!
  ): [Unit]

以下是 DynamoDB 表中的数据示例:

以下是控制台中成功查询的屏幕截图:

注意:我创建了一个 GSI,将 userPK 和 userSK 分别映射为分区键和排序键。我正在查询该二级索引。我已经能够使用控制台成功查询。

【问题讨论】:

【参考方案1】:

错误显示您忘记了version 参数。这是查询模板(docs):


    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : 
        "expression" : "some expression",
        "expressionNames" : 
            "#foo" : "foo"
        ,
        "expressionValues" : 
            ":bar" : ... typed value
        
    
    "index" : "fooIndex",
    "nextToken" : "a pagination token",
    "limit" : 10,
    "scanIndexForward" : true,
    "consistentRead" : false,
    "select" : "ALL_ATTRIBUTES",
    "filter" : 
        ...
    

version 是必需的:

版本

模板定义版本。当前支持 2017-02-28 和 2018-05-29。该值是必需的。

【讨论】:

以上是关于未找到字段的值 - AppSync AWS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 aws AppSync 中按 createdAt 和 updatedAt 排序和过滤?

AWS AppSync Lambda 解析器字段

在 aws appsync 解析器中添加额外字段

在aws appsync解析器中添加额外字段

如何将枚举类型字段从反应发送到 GraphQL/AWS appsync

如何通过查询在 AWS AppSync 中的嵌套字段上进行筛选