AWS AppSync-如何按日期范围(今天到30天之前)查询数据?

时间:2019-05-30 03:09:34

标签: amazon-web-services graphql aws-appsync

这是我的schema.graphql的样子。

type Post 
  @model
  @auth(
    rules: [
      { allow: owner }
    ]
  ) {
  id: ID!
  author: User! @connection(name: "UserPosts")
  content: AWSJSON!
  createdAt: AWSDateTime
  updatedAt: AWSDateTime
}

生成的GraphQL查询如下所示

export const listPosts = `query listPosts(
  $filter: ModelPostFilterInput
  $limit: Int
  $nextToken: String
) {
  listPosts(filter: $filter, limit: $limit, nextToken: $nextToken) {
    items {
      id
      author {
        id
        uuid
      }
      content
      createdAt
      updatedAt
    }
    nextToken
  }
}
`;

我正在呼叫listPosts来查询帖子列表,但不确定如何将日期范围实现到我用来获取数据的以下查询中。

await API.graphql(graphqlOperation(queries.listPosts, {limit: 10, nextToken: nextToken}))

是否可以在上面的查询中添加两个字符串start: TODAYend: 30 DAYS BEFORE TODAY并使其返回30条最新帖子?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

我没有尝试使用Richard提到的新@key指令。
到目前为止,我使用的解决方案是将参数传递给解析器,并在解析器级别实现查询表达式。

例如,我要查询将来的所有预订(当预订开始日期为>今天时),

#set( $todayString = $util.time.nowISO8601().substring(0, 10) )
{
  "version": "2017-02-28",
  "operation": "Query",
  "query": {
    "expression": "guestId = :gId AND startDate > :startDate",
    "expressionValues": {
      ":gId": $util.dynamodb.toDynamoDBJson($ctx.args.guestId),
      ":startDate": $util.dynamodb.toDynamoDBJson($todayString)
    }
  },
  "index": "guestId-startDate-index"
}