Reactjs 如何在AWS Amplify GraphQL客户端中进行过滤
我正在尝试使用放大GraphQL客户端实现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
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放大文档