如何在 aws-amplify 中的列表查询中的字段上按日期(createdAt)排序?

Дми*_*кин 7 sorting schema amazon-web-services graphql aws-amplify

type Test @model @key(fields: ["id", "createdAt"]) {
  id: ID!
  name: String
  createdAt: String!
}
Run Code Online (Sandbox Code Playgroud)

该模型创建了查询:

getTest(createdAt: String!id: ID!): Test

listTests(
  createdAt: ModelStringKeyConditionInput
  filter: ModelTestFilterInput
  id: ID
  limit: Int
  nextToken: String
  sortDirection: ModelSortDirection
): ModelTestConnection
Run Code Online (Sandbox Code Playgroud)

请求按日期排序的列表的方案应该是什么样的?

mat*_*ttk 6

当@key指定多个字段时,第一个字段作为HASH键,后续字段作为SORT键。

https://aws-amplify.github.io/docs/cli-toolchain/graphql#key

可以列出具有相同 HASH 键的排序项。例如,列出用户的所有评论:

type Comment
  @model
  @key(fields: ["userId", "createdAt"]) {
    userId: ID!
    createdAt: String!
    text: String
}
Run Code Online (Sandbox Code Playgroud)

假设您使用 AWS Amplify 的 GraphQL 客户端,这将列出用户的所有评论,按最新顺序排列:

import { API, graphqlOperation } from 'aws-amplify';
import { listComments } from '@/graphql/queries';

export default async function listCommentsForUser(userId) {
  const queryParams = {
    userId,
    sortDirection: 'DESC',
  };

  const operation = graphqlOperation(listComments, queryParams);

  return API.graphql(operation);
}
Run Code Online (Sandbox Code Playgroud)

要列出自指定日期以来的评论(最新的在前),请更改查询参数以包含范围查询:

const queryParams = {
    userId,
    sortDirection: 'DESC',
    createdAt: { gt: timestamp },
  };
Run Code Online (Sandbox Code Playgroud)

  • 创建于:AWSDateTime!而不是字符串! (3认同)