在不过滤的情况下对 AWS Amplify GraphQL 中的结果进行排序
Sorting results in AWS Amplify GraphQL without filtering
在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. This similar question addresses that approach ()。
虽然这看起来很有希望并且成功地生成了我可以使用的新查询,但我尝试过的所有方法都要求我在排序之前过滤数据。我想要做的就是按照给定的排序方向 (ASC/DESC).
在给定的列名上对我的待办事项结果进行排序
这就是我执行简单(未排序)查询的方式:
const todos = await API.graphql(graphqlOperation(listTodos));
我希望按照以下方式做一些事情:
const todos = await API.graphql(graphqlOperation(listTodos, {sortField: "text", sortDirection: "ASC"} ))
.
使用 @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);
有关详细信息,请参阅
我接受了 MTran 的回答,因为我觉得它是最接近实际解决方案的东西,但我也决定实际选择一种解决方法。这样,我就避免了向 ElasticSearch 添加依赖项。
我最终在我的架构中添加了一个字段,并且每个条目都具有相同的字段值。这样,我可以按该值进行过滤,并且仍然拥有整个 table 值,然后我可以根据这些值进行排序。
在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. This similar question addresses that approach (
虽然这看起来很有希望并且成功地生成了我可以使用的新查询,但我尝试过的所有方法都要求我在排序之前过滤数据。我想要做的就是按照给定的排序方向 (ASC/DESC).
在给定的列名上对我的待办事项结果进行排序这就是我执行简单(未排序)查询的方式:
const todos = await API.graphql(graphqlOperation(listTodos));
我希望按照以下方式做一些事情:
const todos = await API.graphql(graphqlOperation(listTodos, {sortField: "text", sortDirection: "ASC"} ))
.
使用 @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);
有关详细信息,请参阅
我接受了 MTran 的回答,因为我觉得它是最接近实际解决方案的东西,但我也决定实际选择一种解决方法。这样,我就避免了向 ElasticSearch 添加依赖项。
我最终在我的架构中添加了一个字段,并且每个条目都具有相同的字段值。这样,我可以按该值进行过滤,并且仍然拥有整个 table 值,然后我可以根据这些值进行排序。