我有两个集合,如下所示:
let User = Schema({
logID: { type: String, required: true },
name: { type: String, required: true }
});
let Log = Schema({
id: { type: String, required: true },
users: [{ type: Schema.Types.ObjectId, ref: 'User' }]
});
我正在执行以下交易:
let currLog = await Log.findOne({"id": logID});
if(!currLog) throw new Error("No such log is there");
let newUser = await User.save(payload);
let updatedLog = await currLog.users.push(newUser._id);
currLog.update();
因此,如果由于某种原因,LOG未更新,则应该回滚新用户,如删除时。
如何使用猫鼬完全实现这一目标?
我查看了以下资源:
https://docs.mongodb.com/manual/tutorial/perform-two-phase-commits/
https://github.com/anand-io/mongoose-transaction
但发现很难实现这一功能
因为在我的情况下,第一个交易的数据正在第二个交易中使用( newUser._id )。