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