如何忽略不匹配的数据来筛选数据



我有这个查询:

query ListFreightDriverTrucks($state: String! $tons: Float!) {
listFreightDrivers(filter: {
state: {
contains: $state
}
}) {
items {
name
city
state
trucks (filter: {
tons: {
eq: $tons
}
}) {
items {
id
brand
model
fuelType
fuelEfficiency
utilityPercentage
tons
axes
frontPhoto
truckBox {
type
width
height
depth
}
}
}
}
}
}

作为回应,我得到了与哈利斯科的$state相匹配的数据。

{
"data": {
"listFreightDrivers": {
"items": [
{
"name": "Jaen Carlos",
"city": "Zapopan",
"state": "Jalisco",
"trucks": {
"items": []
}
},
{
"name": "Diey",
"city": "Zapopan",
"state": "Jalisco",
"trucks": {
"items": []
}
},
{
"name": "Roberto mendez",
"city": "Guadalajara",
"state": "Jalisco",
"trucks": {
"items": []
}
},
{
"name": "Engineering",
"city": "Zapopan",
"state": "Jalisco",
"trucks": {
"items": []
}
},
{
"name": "Roberto mendez",
"city": "Guadalajara",
"state": "Jalisco",
"trucks": {
"items": []
}
},
{
"name": "Andrés",
"city": "Zapopan",
"state": "Jalisco",
"trucks": {
"items": [
{
"id": "2b0cb78e-49c4-4229-8a71-60b350a5fc47",
"brand": "chevrolet",
"model": "xx",
"fuelType": "magna",
"fuelEfficiency": 12,
"utilityPercentage": 10,
"tons": 15,
"axes": 12,
"frontPhoto": "freight-driver/e9adf7fb-09c2-477e-9152-56fe4a71a96b/trucks/dlb0275xqna51.png",
"truckBox": {
"type": "Plataforma",
"width": 4,
"height": 4,
"depth": 4
}
}
]
}
}
]
}
}
}

如果你检查响应,有一些这样的:

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

但我对这些不感兴趣,因为它们与$tons不匹配,就像上一个一样。如何移除它们?

如果我需要生成lambda,DynamoDB查询会是什么样子?

我经常看到这个问题,这让我有点不安全,但GraphQL实际上不应该这样工作。你应该得到你所要求的,而不是";SQL查询自己的胜利";。

Anyhoot,

您可以在解析器(req.vtl文件(中通过过滤掉所有trucks.items.length<1或其他事物。请查看此链接应用程序同步&GraphQL:如何通过嵌套值过滤列表

请注意,这是一个DynamoDB扫描操作(所有列表操作都是(,速度相当慢。

AWS DynamoDB的设计理念与您大多数时候都知道您正在寻找的唯一密钥相同,并且只过滤少量项目。添加大量索引或组合键。

如果您想更新数据模型,建议阅读以下内容:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html


也许可以重新思考您的GraphQL设计?我对卡车一无所知,但可能是

  • "Location has Truck has Driver";相反或
  • "地点有司机有卡车吗

甚至两者都有!由于GraphQL为您提供了所需内容,因此Driver可以包含Truck和Truck。

Location {
id: ID!
truck: [Truck]
driver: [Driver]
}
Truck {
id: ID!
driver: Driver!
}
Driver {
id: ID!
Truck: Truck!
}

Amplify自动生成深度为2的内容,这样你的列表就不会永远循环,你就不会要求你不需要的东西。这里有很多选择。

https://docs.amplify.aws/cli/graphql-transformer/dataaccess


如果你想让它成为Lambda(@函数(,dynamo语法非常简单(而且几乎相同(。

要么你扫描整张桌子https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#scan-财产或者创建一个索引进行查询,然后进行筛选https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#query-属性


最后但并非最不重要的

最新更新