【问题标题】:Trying to understand FQL for faunadb lambda function hit by mutation with resolver in graphQL playground试图在 graphQL 操场上用解析器理解突变命中的 FQL
【发布时间】:2021-05-30 11:58:35
【问题描述】:

我有以下 graphQL 架构。我困扰的部分是突变,它有一个解析器,指向一个动物区数据库 lambda 函数,我希望理想地采用一组输入并通过那里的 ID 更新一个 faunDB 集合文档。

但是,我什至无法获得密码来理解如何将数据从突变传递到 lambda 并返回消息或返回空数组之外的任何内容。

在我的架构下方是我编写的动物区系数据库 FQL lambda 函数,目前它非常基础。

我想我想知道究竟是什么传递给了 animalDB lambda 函数,我能用它做什么。我可以将一组对象传递给它,并通过 FQL 更新由 ID 关联的 DB 文档吗?

在这方面的任何帮助都会很棒,只是走到这一步已经很顺利了。我非常乐意根据需要提供更多详细信息。

谢谢!

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 函数

Query(Lambda(["input"], []))

更新:我尝试了以下方法,但它说我需要返回一个数组,我正在返回一个对象,不知道如何解决这个问题。

Query(
  Lambda(["input"], Get(Ref(Collection("FormInputVal"), "291705061039407629")))
)

【问题讨论】:

    标签: javascript graphql faunadb


    【解决方案1】:

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

    需要注意的几点:

    • 您将自定义解析器的输入命名为 Fauna 将为FormInputVal 类型自动生成,这有效地 覆盖它。为您的自定义输入选择一个名称 等于[type name] + Input

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

    • 确保返回类型与 UDF 的输出相匹配。在你的 例如,架构指定 Form,但您返回的是 FormInputVal

    • 如果您要更新某些文档,则需要传入 ID。 GraphQL API 隐藏了 Refs 周围的一些细节,所以在你的 UDF 中,你 将需要从 ID 重建 ref。

    这是一个更新的架构:

    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

    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")
              )
            )
          )
        )
      )
    })
    

    然后你可以创建几个文档:

    然后批量更新它们

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2019-12-23
      • 2023-04-04
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2018-05-31
      • 1970-01-01
      相关资源
      最近更新 更多