Select 来自 GraphQL 查询的随机 N 条记录
Select random N records from GraphQL query
我正在构建一个简单的测验应用程序,允许用户选择各种类别并生成 5 个问题的测验来测试他们的知识。我在可通过 GraphQL 访问的 AppSync 中设置了一长串问题。然而,随着该列表的不断增长,我将它们拉到客户端并在那里随机 select 没有意义。
GraphQL 是否支持从查询中随机选择 5?这样,在服务器端,我可以 select 随机 5 条记录?
query listAll {
listQuestions(filter: {
topic: {
contains: "chocolate"
}
}) {
items {
question
answer
}
}
}
我考虑过其他方法,例如为每条记录随机分配一个数字并对此进行过滤,但这不会每次都是随机的。
有什么想法吗?
Does GraphQL support choosing random 5 from a query?
不直接,不。 GraphQL 不直接支持您可能想象在 SQL 查询中执行的更多 "interesting" 事情,甚至 "return only the first 10 records" 或 "has a family name of 'Jones'" 等更简单的事情。你必须用它给你的原语来构建这种东西。
Such that, serverside, I can select just 5 records at random?
大多数 GraphQL 服务器实现支持 解析器函数,这是在请求字段值时调用的任意代码。你可以写一个像
这样的模式
type Query {
listQuestions(filter: QuestionFilter, random: Int): [Question!]!
}
并访问解析器函数中的参数。
看起来像AppSync has its own resolver system。通过翻阅它支持 "pick n at random" 方法的文档对我来说并不明显;它似乎主要设计为围绕数据库存储的外观,并且大多数数据库并未针对此类查询进行优化。
David 关于在解析器中编写此逻辑(作为 GraphQL 方式)的说法是正确的。
如果您使用的是 AWS AppSync,则可以使用 Lambda 解析器并将其附加到查询,这样您就可以编写逻辑来在 Lambda 内部选择随机值,使其成为 GraphQL 响应的一部分。这是执行此操作的一种方法。
我正在构建一个简单的测验应用程序,允许用户选择各种类别并生成 5 个问题的测验来测试他们的知识。我在可通过 GraphQL 访问的 AppSync 中设置了一长串问题。然而,随着该列表的不断增长,我将它们拉到客户端并在那里随机 select 没有意义。
GraphQL 是否支持从查询中随机选择 5?这样,在服务器端,我可以 select 随机 5 条记录?
query listAll {
listQuestions(filter: {
topic: {
contains: "chocolate"
}
}) {
items {
question
answer
}
}
}
我考虑过其他方法,例如为每条记录随机分配一个数字并对此进行过滤,但这不会每次都是随机的。
有什么想法吗?
Does GraphQL support choosing random 5 from a query?
不直接,不。 GraphQL 不直接支持您可能想象在 SQL 查询中执行的更多 "interesting" 事情,甚至 "return only the first 10 records" 或 "has a family name of 'Jones'" 等更简单的事情。你必须用它给你的原语来构建这种东西。
Such that, serverside, I can select just 5 records at random?
大多数 GraphQL 服务器实现支持 解析器函数,这是在请求字段值时调用的任意代码。你可以写一个像
这样的模式type Query {
listQuestions(filter: QuestionFilter, random: Int): [Question!]!
}
并访问解析器函数中的参数。
看起来像AppSync has its own resolver system。通过翻阅它支持 "pick n at random" 方法的文档对我来说并不明显;它似乎主要设计为围绕数据库存储的外观,并且大多数数据库并未针对此类查询进行优化。
David 关于在解析器中编写此逻辑(作为 GraphQL 方式)的说法是正确的。
如果您使用的是 AWS AppSync,则可以使用 Lambda 解析器并将其附加到查询,这样您就可以编写逻辑来在 Lambda 内部选择随机值,使其成为 GraphQL 响应的一部分。这是执行此操作的一种方法。