gpt4 book ai didi

node.js - Mongodb 事务 - 无法从快照中读取

转载 作者:行者123 更新时间:2023-12-03 23:48:47 25 4
gpt4 key购买 nike

我正在尝试使用 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();
}

知道我在这里缺少什么吗?

最佳答案

好的,我想通了。根据 Mongoose 文档,您需要在使用事务之前创建集合:

Model.createCollection()
Parameters
[options] «Object» see MongoDB driver docs
[callback] «Function»
Create the collection for this model. By default, if no indexes are specified, mongoose will not create the collection for the model until any documents are created. Use this method to create the collection explicitly.

Note 1: You may need to call this before starting a transaction See https://docs.mongodb.com/manual/core/transactions/#transactions-and-operations
来源: https://mongoosejs.com/docs/api.html#model_Model.createCollection

关于node.js - Mongodb 事务 - 无法从快照中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60723800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com