Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在AWS Amplify GraphQL客户端中进行过滤_Reactjs_React Native_Graphql_Aws Appsync_Aws Amplify - Fatal编程技术网

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

Reactjs 如何在AWS Amplify GraphQL客户端中进行过滤,reactjs,react-native,graphql,aws-appsync,aws-amplify,Reactjs,React Native,Graphql,Aws Appsync,Aws Amplify,我正在尝试使用放大GraphQL客户端实现GraphQL过滤器。我得到了一个待办事项列表,想检索状态为“完成”的待办事项列表 文档仅显示如何获取所有项目和单个项目 const allTodos = await API.graphql(graphqlOperation(queries.listTodos)); console.log(allTodos); 有人可以告诉我如何将过滤器应用到listTodos,以便它返回todos时只显示完成状态 我试着做下面的事情,但它是错误的 API.graph

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

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

const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos);
有人可以告诉我如何将过滤器应用到listTodos,以便它返回todos时只显示完成状态

我试着做下面的事情,但它是错误的

API.graphql(graphqlOperation(queries.listTodos(filter: {
    status: {
        eq: "completed"
    }
})));

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

export const listOrganizations = `query ListOrganizations(
  $filter: ModelOrganizationFilterInput
  $limit: Int
  $nextToken: String
) {
  listOrganizations(filter: $filter, limit: $limit, nextToken: $nextToken) {
    items {
      id
      name
      address
    }
    nextToken
  }
}
`;
您可以在这里看到,
ListOrganizations
查询的第一个参数(在您的例子中,
ListTodos
query)采用的第一个参数是
filter:$filter
。到目前为止,我发现您可以通过执行以下操作来修改此查询

API.graphql(graphqlOperation(queries.listTodos, {
    filter: {
        status: {
            eq: "completed"
        }
    }
})));
这将过滤掉所有TODO,但其
状态
等于
已完成
的TODO除外。我遇到的问题是,我想启用不同级别的访问控制,这样任何拥有
Admin
的Cognito用户池组的人都可以查看
@model
以及
@owner
。我可以使用
@auth
转换器来实现这一切,但现在我的问题是,在某些屏幕上,我只想显示某些实体,它们是该实体的
所有者
,因为我也是
管理员
,API默认为获取所有信息。我想使用此
@filter
ModelOrganizationFilterInput
仅提供我是所有者的数据。我发现的唯一方法是将
owner
字段添加到我的模式中,但是API总是提供owner字段,我想过滤掉该字段


我能找到的关于
aws如何放大
API
graphqlooperation
方法的唯一文档就在这里:但是示例不多,它们也没有显示API在客户端上的工作方式。我被卡住了。

您的模式和请求映射模板是什么样子的?listTodos查询是否接受筛选器输入或其他内容?我知道AppSync会为您生成这些过滤器输入。如果您选择从示例模式开始,则代码是由amplify codegen自动生成的。因此需要filter、limit和next标记,请记住,过滤器应用于前端(至少目前是这样)。你必须设置一个更高的TODO限制来正确过滤它们。嗨@SuperVeetz,你解决问题了吗?至于你建议的过滤器,它可以很好地用于字符串类型的字段,但是对于JSON对象类型的字段又如何呢?Hi@MohammadHarith,老实说,我不完全确定,我假设如果你的对象时间是嵌套的,那么你可以做一些类似于
过滤器:{myObj{someProp{eq:“somevalue}}}
,这可能会起作用,可能不会。我遇到了一个更大的问题,那就是如何实施基于组的安全性,现在,如何通过基于组的安全性进行过滤。。例如,
@auth
transform声明动态或静态安全组,我可以通过组名或给定用户名是否包含在用户组中来筛选结果。是的,它不起作用,该字段具有AWSJSON类型,并作为一个长字符串返回,因此,我只是添加了一个新字段来指定对象中的项,并使用前面建议的过滤,在我的示例中效果很好。谢谢嗨@SuperVeetz,我又卡住了,这次我需要过滤状态为“已完成”和“待定”的TODO。我怎样才能做到这一点?我尝试了
状态:{eq:[“已完成”,“待处理”]}
,但没有工作。嗨,穆罕默德,老实说,我自己还没有遇到这个问题,但我相信你可以使用
{
eq
:“已完成”。},{
eq
:“待处理”}。。我相信有语法可以做到这一点,但我还不能100%确定它是什么。。检查图形ql放大文档