Ayu*_*ani 5 transactions mongoose mongodb node.js
我正在尝试使用 mongoose 进行 MongoDB 事务,但在每次创建数据库并插入用户和公司的请求时,我都会收到以下错误
“由于待处理的集合目录更改,无法读取快照;请重试该操作。快照时间戳为 Timestamp(1584451745, 1)。集合最小值为 Timestamp(1584451753, 1)”
重试请求后,它起作用了。但是,当我发送新请求来创建新数据库并插入用户和公司时,我收到相同的错误。我总是需要重试请求才能成功插入数据。
const session = await mongoose.startSession();
session.startTransaction();
try {
await db.createCollection("users");
await db.createCollection("companies");
const savedUser = await UserModel({
...userDetails,
}).save({ session });
const company = await new CompanyModel({
...companyDetails
}).save({ session });
await session.commitTransaction();
return { message: "User Added Successfully" };
} catch (err) {
error("Transaction Error", err);
await session.abortTransaction();
throw err;
} finally {
session.endSession();
}
Run Code Online (Sandbox Code Playgroud)
知道我在这里缺少什么吗?
好吧,我明白了。根据 mongoose 文档,您需要在使用事务之前创建集合:
\nModel.createCollection()\nParameters\n[options] \xc2\xabObject\xc2\xbb see MongoDB driver docs\n[callback] \xc2\xabFunction\xc2\xbb\nRun Code Online (Sandbox Code Playgroud)\n\n\n为此模型创建集合。默认情况下,如果未指定索引,mongoose 将不会为模型创建集合,直到创建任何文档。使用此方法显式创建集合。
\n
\n\n注意1:您可能需要在开始交易之前调用此方法请参阅https://docs.mongodb.com/manual/core/transactions/#transactions-and-operations
\n
来源: https: //mongoosejs.com/docs/api.html#model_Model.createCollection
\n