【问题标题】:Sorting results in AWS Amplify GraphQL without filtering在 AWS Amplify GraphQL 中对结果进行排序而不进行过滤
【发布时间】:2020-11-02 03:37:55
【问题描述】:

graphql.schema中提供了一个非常简单的模型,我将如何执行一个简单的排序查询?

type Todo @model
  id: ID!
  text: String!
}

queries.js 中生成以下内容。

export const listTodos = /* GraphQL */ `
  query ListTodos(
    $filter: ModelTodoFilterInput
    $limit: Int
    $nextToken: String
  ) {
    listTodos(filter: $filter, limit: $limit, nextToken: $nextToken) {
      items {
        id
        text
      }
      nextToken
    }
  }
`;

我发现多个来源指向@key directive 的方向。这个类似的问题解决了这种方法 (GraphQL with AWS Amplify - how to enable sorting on query)。

虽然这看起来很有希望并且成功地生成了我可以使用的新查询,但我尝试过的所有方法都要求我在对数据进行排序之前对其进行过滤。我想要做的就是按照给定的列名和给定的排序方向 (ASC/DESC) 对我的待办事项结果进行排序。

这就是我执行简单(未排序)查询的方式: const todos = await API.graphql(graphqlOperation(listTodos));

我希望按照以下方式做一些事情: const todos = await API.graphql(graphqlOperation(listTodos, {sortField: "text", sortDirection: "ASC"} )).

【问题讨论】:

    标签: graphql aws-amplify


    【解决方案1】:

    我接受了 Mtran 的回答,因为我觉得它是最接近实际解决方案的事情,但我也决定实际选择一种解决方法。这样,我就避免了向 ElasticSearch 添加依赖项。

    我最终将一个字段添加到我的架构中,并且每个条目都具有该字段的相同值。这样,我可以按该值进行过滤,并且仍然拥有整个值表,然后我可以对其进行排序。

    【讨论】:

      【解决方案2】:

      使用@searchable 指令装饰您的模型,如下所示:

      type Todo @model @searchable
      {
        id: ID!
        text: String!
      }
      

      之后,您可以使用如下排序功能查询您的数据:

      import { searchToDos } from '../graphql/queries';
      import { API, graphqlOperation } from 'aws-amplify';
      
      const toDoData = await API.graphql(graphqlOperation(searchToDos, {
        sort: {
          direction: 'asc',
          field: 'text'
        }
      }));
      console.log(toDoData.data.searchToDos.items);
      

      有关详细信息,请参阅

      【讨论】:

      • 这是否需要额外依赖 AWS Elasticsearch(以及额外的服务器成本?)
      • 是的,这是我在撰写本文时能找到的唯一方法(没有过滤)。如果您考虑到 ElasticSearch 提供的灵活性和性能优于普通数据库搜索查询,那么使用 AWS Elasticsearch 可能是值得的。看看这篇文章:aws.amazon.com/blogs/startups/…
      • 另一种选择是您可以进行客户端排序,但这仅对小型数据集有效。
      猜你喜欢
      • 2019-05-25
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多