微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动物群查询语言关系

如何解决动物群查询语言关系

我想使用 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?