[英]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.