Я пытаюсь создать модель Saas, в которой регистрирующийся пользователь создает Company
. Поэтому, когда пользователь регистрируется, моя функция должна создать Company
и поместить идентификатор компании в ссылку на коллекцию User
.
Теперь, если адрес электронной почты пользователя уже зарегистрирован, моя схема mon goose отклоняет эту запись. Я не могу сначала создать User
, потому что Company
id является обязательным полем для создания User
.
Что мне нужно сделать, так это создать эти два документа в разных коллекциях атомарно. Если сохранение User
не удается, я хочу прервать эту транзакцию, чтобы она также удалила данные Company
.
Вот мой код:
const mSession = await mongoose.startSession();
mSession.startTransaction();
try{
var company=new Company({
name: companyName,
website: companyWebsite
});
company= await company.save();
this.company= mongoose.Types.ObjectId(company._id);
this.emailVerificationCode = Random.alphanumeric();
let user = await this.save();
await mSession.commitTransaction();
console.log("User on success:", user);
return user;
}catch(err){
await mSession.abortTransaction();
return false;
}finally{
mSession.endSession();
}
В этом случае abortTransaction()
, похоже, не работает, поскольку данные Company
все равно сохраняются.