簡體   English   中英

在 appsync graphql 中過濾一對多的精確數據

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

我已經模擬了這個:

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!
}

我正在查詢這樣的數據:

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

我得到的回應是:

{
  "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": []
          }
        }
      ]
    }
  }
}

如果你檢查一下,有一些是這樣的:

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

我怎樣才能避免它們? 我的model是錯的model嗎? 謝謝!

您可以使用映射模板在返回給客戶端之前修改響應數據:

響應映射模板使用 Apache 速度模板語言 (VTL) 編寫,並將解析器的結果轉換回 GraphQL。

在這種情況下,您可以檢查trucks.items是否為空,如果是,則在返回之前從trucks中刪除items數組。

更多細節在這里: 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