mongodb - 传入TypeORM MongoDB ObjectIdColumns的未定义时禁用ID的自动生成

标签 mongodb nestjs typeorm

我正在使用带有TypeORM和MongoDB的NestJs。我有一个Project实体,可能有一个后续项目。我目前的实体设计是

@Entity()
export class Project extends BaseEntity {
  @ObjectIdColumn()
  public id: ObjectID;

  @ObjectIdColumn({ nullable: true, generated: false }) // set value manually
  @OneToOne(() => Project, project => project.id) // key has to exist if not null?
  public successorId?: ObjectID;
}


当我想保留数据类型时,似乎successorId必须是ObjectIdColumn。但是我想禁用自动生成功能,因为我想手动分配一个后续项目。所以在我的存储库中,我正在通过创建一个新项目

@EntityRepository(Project)
export class ProjectsRepository extends Repository<Project> {
    public createProject(successorId?: ObjectID): Promise<Project> {
        const project: Project = new Project();
        project.successorId = successorId;

        return project.save();
    }
}


问题是,当我将undefined分配给successorId时,MongoDB会为id分配相同的值给successorId。所以json响应是

{
  "id": "5e4f98671ad7ed2914fa596e",
  "successorId": "5e4f98671ad7ed2914fa596e"
}


我该如何解决该行为?我不确定是否需要OneToOne关系,但是我想提供一种验证,以便只能将现有ID分配为后继ID,当我传递不存在的随机ID时,我会期望出现错误。

最佳答案

问题在这里

  @OneToOne(() => Project, project => project.id)


我认为您误解了OneToOne的选项。您正在向它提供相关实体的PK列(您的第二个参数),同时它用于定义可以从该关系的另一端引用的属性。
尝试完全删除第二个选项,将其保留

  @OneToOne(() => Project)


让我们知道!

关于mongodb - 传入TypeORM MongoDB ObjectIdColumns的未定义时禁用ID的自动生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335215/

相关文章:

transactions - 写一个TypeORM@Transaction方法,使用这个方法IDE报错 "Invalid number of arguments, expect 2"

java - 在 Java 中设计确认 token

node.js - 使用 mongoose findOne/save 保存对象不起作用

nginx - Nest.js GRPC 客户端在启用 SSL 连接到 NGINX 后面的服务器时使用代码 2 获取 RST_STREAM

typescript - 在 NestJS 中处理 204 无内容响应的最佳方法是什么?

swagger - NestJS 映射类型 - 嵌套对象

javascript - 操作 MongoDB 响应 NodeJS

javascript - var/log/mongodb/mongod.log 从 node.js 打开和关闭连接的无限循环

TypeORM:仅加载某些指定字段的关系

graphql - 使用 TypeORM getManyWithCount 如何生成用于分页的 PageInfo