【问题标题】:Proper way to implement a User record with id vs _id使用 id vs _id 实现用户记录的正确方法
【发布时间】:2020-12-18 12:00:57
【问题描述】:

我无法理解实现 MongoDB 用户记录类型以与 GraphQL 一起使用的正确方法。具体来说,它与用户 ID 有关。

我希望能够查询用户记录并获取用户 ID 作为“ID”。 MongoDB 记录默认有一个 _id。

我该如何做到这一点?

我是否必须将用户记录定义为:

type User {
  id: ID!
  name: String!
  email: String!
}

我应该在创建记录时自己填充“id”字段吗?

或者我应该只使用 _id 作为用户 ID?如果是这样,我该如何查询?我收到问题说我无法查询它。我想是因为它不在 typedef 中。

【问题讨论】:

  • 您需要在您的应用程序中映射它。如果您使用的是框架,请查看它是否支持此类映射。
  • 我正在使用:apollo-server-express、passport、graphql 和 mongodb。我确实注意到 mongodb 有“虚拟”的概念。但我不确定如何使用 mongoDb 模式映射 graphql typeDef 。我希望不必将 id 存储为字符串,因为 _id 已经存在。
  • 没有相关教程?尚未解决的问题?真的吗?
  • 很可能是这样。但在过去的几天里,我一直在研究这个。人们使用不同的服务器等以多种不同的方式进行操作。我可以通过在其自己的“id”字段中声明 id 并在创建后复制 _id 值来使其工作。不过,它并没有真正回答我的问题。因为我现在将 _id 复制到 id 中。
  • 您使用的哪个库中的 graphql 到 mongodb 映射?

标签: mongodb express graphql schema apollo-server


【解决方案1】:

我将 TypeGraphQL 与 TypeORM 一起使用,您可以使用装饰器创建映射:

  @Field(type => ID!, { name: 'id' })
  @Column({ type: '_id', nullable: false, unique: true })
  public _id: string;

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 2013-06-19
    • 2017-04-06
    • 1970-01-01
    • 2022-11-22
    • 2015-11-01
    • 1970-01-01
    • 2013-08-13
    • 2021-04-14
    相关资源
    最近更新 更多