AppSync + DynamoDB:使用过滤器查询不会返回所有有效项

时间:2019-07-11 16:29:25

标签: amazon-web-services aws-appsync

我有Appsync API连接到Dynamo表。

Dynamo表具有数据:(“ id”是键,“ year”是排序键)

|--------------|-------------|-------------|-------------|-------------| 
|      id      |     year    |     name    |    class    |   subject   |    
|--------------|-------------|-------------|-------------|-------------|
|   001        |    2017     |     Tom     |     E1      |     Math    |
|--------------|-------------|-------------|-------------|-------------|
|   002        |    2017     |     Mary    |     E1      |     Math    |
|--------------|-------------|-------------|-------------|-------------|
|   003        |    2017     |     Peter   |     E1      |     Math    |
|--------------|-------------|-------------|-------------|-------------|

模式

type Query {
    listStudents(filter: TableStudentFilterInput, limit: Int, nextToken: String): StudentConnection
}

type StudentConnection {
    items: [Student]
    nextToken: String
}

input TableStudentFilterInput {
    id: TableStringFilterInput
    year: TableStringFilterInput
    name: TableStringFilterInput
    class: TableStringFilterInput
    subject: TableStringFilterInput
}

type Student {
    id: String!
    year: String!
    name: String
    class: String
    subject: String
}

查询:

query listStudentByYear {
  listStudents (filter:{year:{eq:"2017"}}) {
    items {
      id
      year
      name
      class
      subject
    }
  }
}

问题:查询返回001和002,但不返回003。

当我尝试将“ id”从003更新为004时,查询将正确返回001、002、004。

这个奇怪的问题经常发生,有时,AppSync查询返回的结果不完整(缺少一些)。

任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:1)

amplify-js个问题中检出this个线程。

实质上,发生的是之前应用限制。因此,如果限制为20,并且003是条目号21,则它将不包括在过滤操作中。

一种解决方法是从AWS AppSync Console

中的解析器中删除限制

所以改变这个:

#set( $ListRequest = {
  "version": "2017-02-28",
  "limit": $limit
})

对此:

#set( $ListRequest = {
  "version": "2017-02-28",
} )

现在,这不是一个合适的解决方法,因为DynamoDB Scan仅返回1MB数据,这意味着该解决方案不适用于大型(实用)实现。