从GraphQL查询中选择随机N条记录

时间:2019-02-21 07:26:59

标签: react-native graphql aws-appsync aws-amplify

我正在构建一个简单的测验应用程序,该应用程序将允许用户选择各种类别并生成5个问题测验以测试他们的知识。我在通过GraphQL访问的AppSync中设置的问题很长。但是,随着该列表的增长,对于我来说,将它们拉到客户并随机选择那里是没有意义的。

GraphQL是否支持从查询中选择随机数5?这样,在服务器端,我只能随机选择5条记录?

 query listAll {
  listQuestions(filter: {
    topic: {
      contains: "chocolate"
    }
  }) {
    items {
      question
      answer
    }
  }
}

我曾考虑过其他方法,例如为每个记录随机分配一个编号并对此进行过滤,但这并不是每次都随机的。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  

GraphQL是否支持从查询中选择随机数5?

不直接,不。 GraphQL不直接支持您在SQL查询中可能想到的大多数更“有趣”的事情,甚至更简单的事情,例如“仅返回前10条记录”或“姓氏为'Jones'”。您必须根据它提供的原始内容来构建这种东西。

  

在服务器端,我只能随机选择5条记录吗?

大多数GraphQL服务器实现均支持解析器功能,这些功能是在请求字段值时调用的任意代码。您可以编写类似

的架构
type Query {
  listQuestions(filter: QuestionFilter, random: Int): [Question!]!
}

并访问解析器函数中的参数。

它看起来像AppSync has its own resolver system。对我而言,通过分页阅读文档并支持“随机选择 n ”方法并不明显。它似乎主要被设计为围绕数据库存储的立面,并且大多数数据库并未针对这种查询进行优化。

答案 1 :(得分:1)

David正确地在解析器中编写此逻辑(作为GraphQL方式)。

如果您使用的是AWS AppSync,则可以使用Lambda解析器并将其附加到查询,因此您可以编写逻辑以在Lambda内选择随机值,使其成为GraphQL响应的一部分。这是一种方法。