Я использую Nest Js с TypeORM и MongoDB. У меня есть объект 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
, но я хочу предоставить проверку, чтобы можно было назначать только существующие идентификаторы в качестве преемников, я мог бы ожидать ошибок, когда передам случайные идентификаторы, которые не существуют.