【发布时间】:2022-01-24 08:55:13
【问题描述】:
我对 mongodb 事务还很陌生,所以我不知道我做错了什么。我已按照文档中的说明进行操作,但仍然出现此错误
{
"status": 400,
"name": "Error",
"message": "ClientSession cannot be serialized to BSON."
}
这是我的代码
async createInsurance(params) {
const session = await db99.startSession();
try {
session.startTransaction();
const doc = await db.insurance
.find({ session })
.sort({ createdAt: -1 })
.limit(1)
.lean();
const latest = doc[0];
const payload = { ...params, id: latest ? latest.id + 1 : 1 };
const data = await db.insurance.create(payload, { session });
await mongoTransaction.commitWithRetry(session);
const result = defaultResult('SuccessCreateInsurance', SuccessCreateInsurance[this.lang], data, 200);
return result;
} catch (error) {
logger.log('error', 'ProductService-createInsurance', { error });
throw error;
} finally {
await session.endSession();
}
}
有什么我错过的吗?
【问题讨论】:
-
是否有
.create收集方法?我知道.insertOne和.insertMany都采用第二个参数,即options。你试过那个吗? mongodb.github.io/node-mongodb-native/4.2/interfaces/…mongodb.github.io/node-mongodb-native/4.2/interfaces/… -
@TamilVendhanKanagarasu 我认为这不是问题,因为错误在 .find 方法上仍然存在(我也尝试了 findOne,但没有用)
-
你使用的是原生驱动还是像mongoose这样的ORM?对于
.findOne、.find等,必须在第三个参数中传递会话属性。