简体   繁体   English

在 appsync graphql 中过滤一对多的精确数据

[英]Filter one to many exact data in appsync graphql

I have modeled this:我已经模拟了这个:

type FreightDriver
  @model
  @key(
    name: "byCityByState"
    fields: ["state", "city"]
    queryField: "freightDriversByStateByCity"
  ) {
  id: ID!
  name: String!
  state: String!
  city: String!
  trucks: [Truck] @connection(keyName: "byFreightDriver", fields: ["id"])
}

type Truck
  @model
  @key(name: "byFreightDriver", fields: ["freightDriverId", "tons"]) {
  id: ID!
  freightDriverId: ID!
  boxId: ID!
  brand: String!
  model: String!
  tons: Float!
  box: Box @connection(fields: ["boxId"])
}

type Box @model {
  id: ID!
  type: String!
  width: Float!
  height: Float!
  depth: Float!
}

And I'm querying the data like this:我正在查询这样的数据:

query {
  freightDriversByStateByCity(state: "Jalisco", city: { eq: "Guadalajara" }) {
    items {
      id
      name
      city
      state
      trucks(tons: { eq: 12 }) {
        items {
          brand
          model
          box {
            type
          }
        }
      }
    }
  }
}

And I'm getting as a response this:我得到的回应是:

{
  "data": {
    "freightDriversByStateByCity": {
      "items": [
        {
          "id": "aebb6696-573d-41ed-894e-22b69264cace",
          "name": "Diey",
          "city": "Guadalajara",
          "state": "Jalisco",
          "trucks": {
            "items": [
              {
                "brand": "chevrolet",
                "model": "12",
                "box": {
                  "type": "Refrigerada"
                }
              }
            ]
          }
        },
        {
          "id": "6e8e6772-61e7-47d6-b134-d615a3c65f62",
          "name": "Roberto Mendez",
          "city": "Guadalajara",
          "state": "Jalisco",
          "trucks": {
            "items": []
          }
        },
        {
          "id": "d314808c-64e7-421d-b83b-008177ab6b25",
          "name": "Roberto Mendez",
          "city": "Guadalajara",
          "state": "Jalisco",
          "trucks": {
            "items": []
          }
        },
        {
          "id": "19847d0c-185c-48f6-9e5c-435e3907133a",
          "name": "Andrés",
          "city": "Guadalajara",
          "state": "Jalisco",
          "trucks": {
            "items": [
              {
                "brand": "chevrolet",
                "model": "1234",
                "box": {
                  "type": "Refrigerada"
                }
              },
              {
                "brand": "chevrolet",
                "model": "1234",
                "box": {
                  "type": "Grúa"
                }
              },
              {
                "brand": "chevrolet",
                "model": "12",
                "box": {
                  "type": "Refrigerada"
                }
              }
            ]
          }
        },
        {
          "id": "2c4c9e3a-bfe5-4d4e-bee7-3eddb1b8ef1b",
          "name": "Roberto Mendez ",
          "city": "Guadalajara",
          "state": "Jalisco",
          "trucks": {
            "items": []
          }
        },
        {
          "id": "cb4eb22c-aa54-416e-aecc-305a18bc9c83",
          "name": "Roberto Mendez",
          "city": "Guadalajara",
          "state": "Jalisco",
          "trucks": {
            "items": []
          }
        }
      ]
    }
  }
}

If you check, there are some with this:如果你检查一下,有一些是这样的:

"trucks": {
  "items": []
}

How can I avoid them?我怎样才能避免它们? Is my model wrongly model?我的model是错的model吗? Thank you!谢谢!

You can use mapping templates to modify the response data before it is returned to the client:您可以使用映射模板在返回给客户端之前修改响应数据:

The response mapping template is written with the Apache Velocity templating language (VTL) and translates the results of the resolver back into GraphQL.响应映射模板使用 Apache 速度模板语言 (VTL) 编写,并将解析器的结果转换回 GraphQL。

In this case you could check if trucks.items is empty and, if so, remove the items array from trucks before it's returned.在这种情况下,您可以检查trucks.items是否为空,如果是,则在返回之前从trucks中删除items数组。

More details here: https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-programming-guide.html更多细节在这里: https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-programming-guide.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM