【发布时间】:2020-06-29 21:07:47
【问题描述】:
我想批量更新动物数据库中带有 graphQL 突变的条目列表。 输入数据是来自外部来源的冠状病毒病例列表。它会经常更新。如果集合中存在条目名称,则突变应更新现有条目,如果不存在,则创建新条目。
当前的 GRAPHQL 突变
mutation UpdateList($data: ListInput!) {
updateList(id: "260351229231628818", data: $data) {
title
cities {
data {
name
infected
}
}
}
}
图形变量
{
"data": {
"title": "COVID-19",
"cities": {
"create": [
{
"id": 22,
"name": "Warsaw",
"location": {
"create": {
"lat": 52.229832,
"lng": 21.011689
}
},
"deaths": 0,
"cured": 0,
"infected": 37,
"type": "ACTIVE",
"created_timestamp": 1583671445,
"last_modified_timestamp": 1584389018
}
]
}
}
}
架构
type cityEntry {
id: Int!
name: String!
deaths: Int!
cured: Int!
infected: Int!
type: String!
created_timestamp: Int!
last_modified_timestamp: Int!
location: LatLng!
list: List
}
type LatLng {
lat: Float!
lng: Float!
}
type List {
title: String!
cities: [cityEntry] @relation
}
type Query {
items: [cityEntry!]
allCities: [cityEntry!]
cityEntriesByDeathFlag(deaths: Int!): [cityEntry!]
cityEntriesByCuredFlag(cured: Int!): [cityEntry!]
allLists: [List!]
}
每次突变运行时,它都会创建新的副本。 在单个突变中更新列表的最佳方法是什么?
【问题讨论】:
-
嗨!您能否在答案中分享架构(或架构的一部分)?看起来你可能需要一个 upsert 突变才能这样做,但不幸的是,目前 FaunaDB 上不可用。您可以尝试预先创建城市,然后在根据您共享的突变创建该类型时使用“connect”而不是“create”。
-
感谢您的建议。我添加了架构细节。 upsert 突变正是我所需要的——“如果不存在插入条目,则更新它们”。如果动物 graphQL 尚不支持它,则可能是 Fauna Query Language。
-
它绝对可以在 FQL 中作为一个单独的函数来实现。要实现自定义解析器,您可以查看:css-tricks.com/instant-graphql-backend-using-faunadb。我会让 Leo 给你详细信息,因为他是专家。同时,您正在构建的东西似乎很有趣,如果您想与我们讨论或需要帮助以使您的进展顺利,请加入community.fauna.com并与我们交谈
-
@BrechtDeRooms 我在 FaunaDB 社区问了两次同样的问题,但没有得到任何答复。而且这里似乎也没有回复。此外,文档也没有显示如何使用解析器将参数从 graphql 传递给 UDF 的单个示例。
-
好的,我没有想到@resolver 文档中缺少架构示例。我已经让我们的文档团队知道并在下面构建了一个答案:)
标签: graphql bulk mutation faunadb