使用 id vs _id 实现用户记录的正确方法
Posted
技术标签:
【中文标题】使用 id vs _id 实现用户记录的正确方法【英文标题】:Proper way to implement a User record with 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 映射? 【参考方案1】:我将 TypeGraphQL 与 TypeORM 一起使用,您可以使用装饰器创建映射:
@Field(type => ID!, name: 'id' )
@Column( type: '_id', nullable: false, unique: true )
public _id: string;
【讨论】:
以上是关于使用 id vs _id 实现用户记录的正确方法的主要内容,如果未能解决你的问题,请参考以下文章