当我有两个模式并且它们互相引用时:
const SchemaA = new Schema({
_schemaB: [{
type: Schema.Types.ObjectId,
ref: 'SchemaA'
}]
});
const SchemaB = new Schema({
_schemaA: {
type: Schema.Types.ObjectId,
ref: 'SchemaB'
}
});
mongoose.model('SchemaA', SchemaA);
mongoose.model('SchemaB', SchemaB);
每次创建SchemaB类型的文档时,都需要将其添加到SchemaA的集合中以保持更新。
要实现它,我在SchemaB中使用了一个pre.save(...)
钩子,但是我想知道是否有更好的方法来实现它。
谢谢!
答案 0 :(得分:1)
我看到的使用预挂钩的唯一问题是,如果预挂钩成功,然后实际保存失败,将会发生什么。在这种情况下,您可以考虑使用猫鼬交易来确保将数据保存为一个原子操作。
const session = await SchemaB.startSession();
session.startTransaction();
try {
// save new SchemaB
// add to SchemA and save SchemaA
await session.commitTransaction();
session.endSession();
} catch (e) {
await session.abortTransaction();
session.endSession();
}