AWS amplify graphql appsync - 不返回已删除的项目?

问题描述 投票:0回答:4

我正在将 AWS amplify 与 graphql 和 appsync 结合使用。 当我执行标准列表查询时,appsync 在它返回的项目列表中包含已删除的项目。

我该怎么做才能使其仅返回未删除的项目?

我尝试了这个查询,但它抛出了一个错误:

query MyQuery($filter: ModelFrameFilterInput = {_deleted: {ne: true}}) {
  listFrames(filter: $filter) {
    items {
      _deleted
      name
      id
    }
  }
}

这是错误消息:

 "message": "Validation error of type BadValueForDefaultArg: Bad default value ObjectValue{objectFields=[ObjectField{name='_deleted', value=ObjectValue{objectFields=[ObjectField{name='ne', value=BooleanValue{value=true}}]}}]} for type ModelFrameFilterInput"
amazon-web-services graphql aws-appsync aws-amplify
4个回答
2
投票

尚不支持此功能 查看this问题/功能请求 建议使用一种解决方法,在 graphql 模式的过滤器输入中添加

_deleted

input ModelTodoFilterInput {
    id: ModelIDInput
    name: ModelStringInput
    description: ModelStringInput
    and: [ModelTodoFilterInput]
    or: [ModelTodoFilterInput]
    not: ModelTodoFilterInput
    _deleted: ModelBooleanInput
}

1
投票

您可以做的一件事是禁用冲突解决程序,如果您没有必要的话,“删除使用冲突解决方案的元素后,它们不会立即从数据库中删除。相反,会添加两个标志:设置了

_deleted
设置为 true,并且
_ttl
设置为使该对象在 30 天后过期。”请参阅:错误“冲突解决程序拒绝突变。”当在放大中删除时

要禁用它,请运行

amplify update api
,系统将提示您选择禁用冲突解决程序

但是如果您使用DataStore,则必须启用冲突解决程序。这样的话,我不知道如何解决。


0
投票

这是使用 ConflictResolution 时的一个已知问题。我过去也遇到过这个问题。我的解决方案是使用 DynomoDB Streams Trigger 和 AWS Amplify 来侦听 DynamoDB 更新事件,然后通过 Lambda 删除记录。

这里是 AWS Amplify GraphQL Lambda 触发器的官方文档

https://docs.amplify.aws/cli/usage/lambda-triggers/#as-a-part-of-the-graphql-api-types-with-model-annotation

DynamoDB 触发器几乎是实时的,因此即使使用 128MB Lambda 也能很好地工作


0
投票

您可以尝试将

_deleted: { ne: true }
添加到您的过滤器中,如下所示:

const resp = API.graphql<GraphQLQuery<ListTodosQuery>>({
  query: queries.listTodos,
  variables: {
    filters: {
      _deleted: { ne: true }
    }
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.