gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:59:15 27 4
gpt4 key购买 nike

我正在使用带有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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com