首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在graphQL游乐场尝试理解faunadb lambda函数被变异和解析器击中的FQL

在graphQL游乐场尝试理解faunadb lambda函数被变异和解析器击中的FQL
EN

Stack Overflow用户
提问于 2021-03-01 05:30:10
回答 1查看 111关注 0票数 0

我有以下graphQL模式。最让我困扰的是它的变异,它有一个解析器,指向一个faunaDBλ函数,理想情况下,我想接受一个输入数组,并通过那里的ID更新一个faunDB集合文档。

然而,我甚至无法获得密码,无法理解如何将数据从突变传递到lambda,并返回一条消息或空数组以外的任何内容。

在我的模式下面是我编写的faunaDB FQL lambda函数,在这一点上它是非常基础的。

我想我想知道的是,传递给faunaDB lambda函数的到底是什么,我能用它做什么。我是否可以将对象数组传递给它,并通过FQL更新由ID关联的DB文档。

这方面的任何帮助都将是很好的,只是到了这一点已经是一个旅程。我非常乐意根据需要提供更多的细节。

谢谢!

代码语言:javascript
运行
复制
type Form {
  name: String!
  index: Int!
  user: User
  formInputVals: [FormInputVal!] @relation
}

type FormInputVal {
  name: String!
  index: Int!
  type: String!
  formRoot: Form!
}

type User {
  name: String!
  email: String!
  password: String!
  forms: [Form] @relation
}

type Query {
  allForms: [Form!]
  allUsers: [User!]
  allFormInputVals: [FormInputVal!]
}

input FormInputValInput {
  name: String!
  index: Int!
  type: String!
}

type Mutation {
  updateMultipleInputVals(input: FormInputValInput): Form!
    @resolver(name: "multiple_inputs")
}

faunaDB函数

代码语言:javascript
运行
复制
Query(Lambda(["input"], []))

更新:我已经尝试了以下方法,但它告诉我需要返回一个数组,我返回一个对象,不确定如何解决这个问题。

代码语言:javascript
运行
复制
Query(
  Lambda(["input"], Get(Ref(Collection("FormInputVal"), "291705061039407629")))
)
EN

回答 1

Stack Overflow用户

发布于 2021-08-25 21:46:11

您可以将数组作为输入传递给UDF,包括将该UDF用作GraphQL解析器的情况。

有几件事需要注意:

  • 您将自定义解析器的输入命名为与FormInputVal类型自动生成的输入相同的内容,从而有效地覆盖了它。为自定义输入选择一个不等于[type name] + Input

的名称

  • 如果要将数据数组作为输入传递,请将参数指定为列表类型(放在方括号中)。

  • 确保返回类型与自定义函数的输出相匹配。在您的示例中,模式指定为Form,但您返回的是一个FormInputVal

  • 如果您要更新某些文档,则需要传入ID。GraphQL API隐藏了引用的一些详细信息,因此在您的中,您将需要根据ID重新构造引用。

以下是更新后的模式:

代码语言:javascript
运行
复制
type Form {
  name: String!
  index: Int!
  user: User
  formInputVals: [FormInputVal!] @relation
}

type FormInputVal {
  name: String!
  index: Int!
  type: String!
  formRoot: Form!
}

type User {
  name: String!
  email: String!
  password: String!
  forms: [Form] @relation
}

type Query {
  allForms: [Form!]
  allUsers: [User!]
  allFormInputVals: [FormInputVal!]
}

input FormInputValMultiUpdateInput {
  id: ID!
  name: String!
  index: Int!
  type: String!
}

type Mutation {
  updateMultipleInputVals(data: [FormInputValMultiUpdateInput]!): [FormInputVal]!
    @resolver(name: "multiple_inputs")
}

和一个UDF

代码语言:javascript
运行
复制
CreateFunction({
  name: "multiple_inputs",
  body: Query(
    Lambda(
      ["data"],
      Map(
        Var("data"),
        Lambda(
          "input",
          Let(
            {
              update: Update(
                Ref(Collection("FormInputVal"), Select("id", Var("input"))),
                { data: Merge(Var("input"), { id: null }) }
              )
            },
            Var("update")
          )
        )
      )
    )
  )
})

然后您可以创建两个文档:

,然后批量更新它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66414021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档