gpt4 book ai didi

javascript - 更新 FaunaDB 中的记录时,如何在不传入每个字段和子对象的情况下更新一个字段?

转载 作者:行者123 更新时间:2023-12-03 07:24:41 39 4
gpt4 key购买 nike

也许我还没有掌握GraphQL,但是我想更新数据库中的一条复杂记录。我找不到解释这个的文档,它没有使用一个简单的例子。我正在使用 FaunaDB 并尝试在 GraphQL playground 中测试一些东西,然后再用 JS 实现它。

这是我的架构示例:

type Event {
name: String!
email: String!
eventName: String!
location: String
guests: [Guest!]!
note: String!
confirmed: Boolean!
completed: Boolean!
dateTimeStart: Time
dateTimeEnd: Time
sentConfirmation: Boolean!
}

type Guest @embedded {
email: String!
rsvp: Boolean
results: SurveyAnswers
}

type SurveyAnswers @embedded {
~ 12 various fields
}

我想更新事件的一个字段:sentConfirmation,就是这样。

我知道事件 ID 以及我想将 bool 值更新为什么。

有没有一种方法可以编写一个突变来仅传递一个 ID 和更新后的 bool 值并更改该单个值,或者我是否需要按字面意思传递整个对象及其所有子对象更新了一个顶级字段?

最佳答案

这应该可以通过调用自动生成的 partialUpdate 突变来实现。您可能没有注意到它,因为它目前仅作为 Schema Preview 可用。功能。

这基本上意味着为了启用它,您需要将以下 header 添加到您的 HTTP 请求中:

X-Schema-Preview: partial-update-mutation

请注意,由于此模式预览功能添加了一个新的自动生成 突变,因此您必须在执行 GraphQL 操作时添加此 header (即,针对 /graphql 端点发送请求),而不是导入模式时(即再次向 /import 端点发送请求)。原因基本上是所有自动生成的查询和变更都是在运行时派生的,而不是在导入模式时派生的。

现在,如果您已如上所述添加 header ,则在调用一些内省(introspection)查询以读回模式时(例如 GraphQL Playground 所做的),您应该注意到有一个新的突变字段和一个新的输入对象:

input PartialUpdateEventInput {
name: String
email: String
eventName: String
location: String
guests: [PartialUpdateGuestInput!]
note: String
confirmed: Boolean
completed: Boolean
dateTimeStart: Time
dateTimeEnd: Time
sentConfirmation: Boolean
}

type Mutation {
partialUpdateEvent(id: ID!, data: PartialUpdateEventInput!): Event
}

由于所有字段对于这个新输入对象都是可选的,您现在应该能够只更新 sentConfirmation 字段:

mutation PartialUpdate {
partialUpdateEvent(id: "269434161519919634", data: {
sentConfirmation: true
}) {
_id
}
}

所有未包含在突变中的字段将保持不受影响。

与 FQL 建立并行,这意味着 GraphQL 的 update 突变将充当 FQL 的 Replace函数,以及 GraphQL 的 partialUpdate 突变作为 FQL 的 Update功能。

关于javascript - 更新 FaunaDB 中的记录时,如何在不传入每个字段和子对象的情况下更新一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62602545/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com