当我有两个模式时,它们像这样相互引用:

    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(...)钩子,但是我想知道是否有更好的方法可以做到这一点。

谢谢!

最佳答案

我看到的使用预挂钩的唯一问题是,如果预挂钩成功,然后实际保存失败,将会发生什么。在这种情况下,您可以考虑使用猫鼬交易来确保将数据保存为一个原子操作。

    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();
    }

07-24 09:51