首页 > 解决方案 > 从 AWS Amplify Graphql API 过滤数据

问题描述

Graphql 架构:

type Media @model
{
  id: ID!
  title: String
  type: String
}

样本数据 :

{
      id: "some ID",
      title: "sample media1",
      type: "image/png",
}

{
      id: "some ID",
      title: "sample media2",
      type: "video/mp4",
}

我只想获取其类型包含字符串“image”的数据。

类型:“图像/mp4”

我知道我可以通过这种方式获得一些基于标题的数据。

import { API, graphqlOperation } from "aws-amplify"
import * as queries from "@src/graphql/queries"
...
let title = "sample media1"
const medias = await API.graphql(
                 graphqlOperation(queries.listMedias, { filter: { title: { eq: title } } })
               )

是否有任何类似的方法来获取其属性之一包含特定值的数据?

“包含”不“完全相同”

标签: javascriptreactjsgraphqlaws-amplifyamazon-dynamodb

解决方案


如 AWS Amplify文档中所述,您可以使用相应的 DynamoDB 查询。其中一个查询是包含,但它取决于您正在过滤的字段类型。DynamoDB 支持的所有算子列表:

  • 情商
  • 网元
  • LT
  • 通用电气
  • 燃气轮机
  • NOT_NULL
  • 空值
  • 包含
  • NOT_CONTAINS
  • 开始于
  • 之间

所以在你的例子中:

import { API, graphqlOperation } from "aws-amplify"
import * as queries from "@src/graphql/queries"
...
let title = "sample media1"
const medias = await API.graphql(
                 graphqlOperation(queries.listMedias, { filter: { title: { contains: title } } })
               )

推荐阅读