【问题标题】:Select random N records from GraphQL query从 GraphQL 查询中选择随机 N 条记录
【发布时间】:2019-07-15 00:49:07
【问题描述】:

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

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

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

我已经考虑过其他方法,例如为每条记录随机分配一个数字并对此进行过滤,但这不会每次都是随机的。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      不直接,不。 GraphQL 不直接支持您可能想象在 SQL 查询中执行的大多数更“有趣”的事情,甚至更简单的事情,例如“仅返回前 10 条记录”或“姓氏为 'Jones'”。你必须用它给你的原语来构建这种东西。

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

      大多数 GraphQL 服务器实现都支持 解析器函数,它们是在请求字段值时调用的任意代码。你可以写一个像

      这样的模式
      type Query {
        listQuestions(filter: QuestionFilter, random: Int): [Question!]!
      }
      

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

      看起来像AppSync has its own resolver system。通过翻阅文档,我发现它支持“随机选择 n”方法对我来说并不明显;它似乎主要被设计为围绕数据库存储的外观,并且大多数数据库都没有针对这种查询进行优化。

      【讨论】:

        猜你喜欢
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多