动物群查询语言关系

问题描述

我想使用 FQL 编写我的 graphql 后端,但我无法处理创建和连接到 FQL

我的后端 NodeJS 代码

  async createNew(data) {
    const query = q.Create(
      q.Collection('comments'),{ data }
    )

    const result: values.Document<Comment> = await this.client.query(query);
    result.data._id = result.ref.id;

    return result.data;
  }

我在我的 GraphQL 游乐场中运行这段代码

  createComment(data: {
    user: {
      create: {
        username: "1"
        password: "1"
        email: "1"
        gender: MALE
        birthday: "2021-01-01"
        country: "1"
      }
    }
    creationDate: "2021-05-04T17:07:00Z"
    content: "hello"
    likes: 1
    ballot: {
      connect: 296290209590411781
    }
  }) {
    user {
      username
    }
    ballot {
      title
    }
  }

我希望这段代码会创建一个新用户并将投票与此评论联系起来,但我在 FaunaDB 评论集合中得到了这个可悲的结果:

FaunaDB results

我写了下一个代码来为我做这件事,但我确信这是一个描述的反模式here

  async createNew(data) {
    if(data.user) {
      let id;
      if(data.user.create) {
        const user = await this.userService.createNew(data.user.create);
        id = user._id;
      }
      data.user = q.Ref(
        q.Collection('users'),id ?? data.user.connect
      );
    }

    const query = q.Create(
      q.Collection('comments'),{ data }
    )

    const result: values.Document<Comment> = await this.client.query(query);
    result.data._id = result.ref.id;

    return result.data;
  }

上面的代码演示了为用户创建和连接,我想这段代码对于每个关系都会非常详尽。我想在一个查询中编写所有 FQL,但我真的不知道如何实现它

我只添加了带有 Comment - User 关系的 schema,Ballot 也有类似的逻辑。简而言之,我的架构:用户有选票,选票有评论评论有父选票和用户

我的动物群架构:

type User @collection(name: "users") {
  username: String!
  email: String!
  password: String!
  birthday: Date!
  gender: Gender!
  country: String!
  createdBallots: [Ballot!]! @relation
}

enum Gender {
  MALE
  FEMALE
  OTHER
}

type Comment @collection(name: "comments") {
  user: User!
  creationDate: Time!
  content: String!
  likes: Int!
  ballot: Ballot!
}

我正在尝试使用生成的 GraphQL 架构:

scalar Date
scalar Time
scalar Long

type Comment {
  _id: ID!
  likes: Int!
  content: String!
  creationDate: Time!
  user: User!
  ballot: Ballot!
  _ts: Long!
}

type User {
  birthday: Date!
  email: String!
  username: String!
  _id: ID!
  country: String!
  createdBallots(
    _size: Int
    _cursor: String
  ): BallotPage!
  gender: Gender!
  password: String!
  _ts: Long!
}

enum Gender {
  MALE
  FEMALE
  OTHER
}

type Mutation {
  createComment(data: CommentInput!): Comment!
  createuser(data: UserInput!): User!
}

input CommentInput {
  user: CommentUserRelation
  creationDate: Time!
  content: String!
  likes: Int!
  ballot: CommentBallotRelation
}

input CommentUserRelation {
  create: UserInput
  connect: ID
}

input UserInput {
  username: String!
  email: String!
  password: String!
  birthday: Date!
  gender: Gender!
  country: String!
  createdBallots: UserCreatedBallotsRelation
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...