如何在 AWS Amplify GraphQL 客户端中进行过滤

Moh*_*ith 12 reactjs graphql react-native aws-appsync aws-amplify

我正在尝试使用 Amplify GraphQL 客户端实现 GraphQL 过滤器。我得到了一个待办事项列表,想检索状态为已完成的待办事项列表。

文档仅显示如何获取所有项目和单个项目

const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos);
Run Code Online (Sandbox Code Playgroud)

有人可以指出我如何将过滤器应用于 listTodos 以便它仅返回状态为完成的待办事项。

我尝试执行以下操作,但这是错误的。

API.graphql(graphqlOperation(queries.listTodos(filter: {
    status: {
        eq: "completed"
    }
})));
Run Code Online (Sandbox Code Playgroud)

Sup*_*etz 18

我想我有你的问题的答案,但我也有一个关于 AWS Amplifycodegen查询、突变等的类似问题。如果你查看在~/graphql文件夹内生成的代码,你会发现一个与此类似的声明文件:

export const listOrganizations = `query ListOrganizations(
  $filter: ModelOrganizationFilterInput
  $limit: Int
  $nextToken: String
) {
  listOrganizations(filter: $filter, limit: $limit, nextToken: $nextToken) {
    items {
      id
      name
      address
    }
    nextToken
  }
}
`;
Run Code Online (Sandbox Code Playgroud)

您可以在此处看到ListOrganizations查询的第一个参数(在您的情况下为ListTodos查询)的第一个参数为filter: $filter。到目前为止,我已经发现您可以通过执行以下操作来修改此查询...

API.graphql(graphqlOperation(queries.listTodos, {
    filter: {
        status: {
            eq: "completed"
        }
    }
})));
Run Code Online (Sandbox Code Playgroud)

这应该过滤掉所有 Todo,除了它们status等于 的那些completed。那我遇到的问题是,我想启用不同级别的访问控制与的Cognito用户池组,使得任何人都Admin可以查看@model还有@owner。我能够使用@auth转换器使这一切正常工作,但现在我的问题是在某些屏幕上,我只想显示属于该owner实体的某些实体,并且因为我也是Admin,所以 API 默认为我提供所有内容. 我想使用这个@filterModelOrganizationFilterInput只给我我是所有者的数据。我发现这样做的唯一方法是添加owner 字段到我的架构,但是 API 总是提供所有者字段,我想过滤掉该字段。

我可以在这里找到关于aws-amplify APIgraphqlOperation方法的唯一文档:https : //aws-amplify.github.io/docs/js/api但示例并不多,它们也没有展示 API 的工作原理在客户端上。我被困住了。