首页 > 解决方案 > GraphQL:基于用户属性的排序查询

问题描述

我刚刚使用 AWS Amplify、DynamoDB 和 GraphQL 在我的 iOS 应用程序中实现了分页。我想做的是根据用户的分数从高到低查询用户。为此,我需要在拨打电话时对查询进行排序。如何根据用户的分数进行排序查询?

下面是我的用户表

type User @model @key(fields: ["username"]) {
  name: String
  email: String!
  username: String!
  dateOfBirth: String
  university: String!
  phoneNumber: String!
  biography: String
  score: Int!
  deviceToken: String
  endpointArn: String
}

标签: sortinggraphqlamazon-dynamodbaws-amplifyaws-appsync

解决方案


这是索引的一个用例。

就如何实现该数据访问模式而言,当您使用该@key指令时,Amplify 会为您创建一个全局二级索引。在这种情况下,由于您只对高分感兴趣,您可以通过将以下指令添加到您的 User 模型来在 score 字段上创建另一个 GSI:

@key(name: "UsersByScore", fields: ["username","score"], queryField: "UsersByScore")

然后,通过指定的限制n和排序方向,使用 Amplify 生成的 UsersByScore 查询来查询n得分最高(或最低)的用户。


推荐阅读