javascript - mongodb和nodejs中的错误“给定事务号*不匹配”
问题描述
我想在添加数据时修改两个架构。为此,我使用了带有 nodejs 的 mongodb 的 ACID 事务,如下所示。但是,当我运行程序时,它会显示如下错误
(node:171072) UnhandledPromiseRejectionWarning: MongoError: Given transaction number 3 does not match any in-progress transactions. The active transaction number is 2
at MessageStream.messageHandler (/home/user/Projects/project/node_modules/mongodb/lib/cmap/connection.js:272:20)
at MessageStream.emit (events.js:375:28)
at MessageStream.emit (domain.js:470:12)
addData = async(request: Request, response: Response) => {
const session = await stockSchema.startSession()
try {
const userData = request.body
let data = {}
const transaction = await session.withTransaction(async() => {
try {
userData.products.map(async(item: any) => {
await inventorySchema.findOneAndUpdate({ _id: item.materialID }, { $inc: {qty: -item.qty }}, { session });
});
data = new stockSchema(userData);
await data.save({ session });
} catch (error) {
await session.abortTransaction()
throw new Error("Could not create data. Try again.");
}
});
if (transaction) {
session.endSession()
return returnData(response, data, 'Data created successfully.');
} else {
throw new Error("Could not create data. Try again.");
}
} catch (error: any) {
session.endSession();
return Error(response, error.message, {});
}
}
解决方案
推荐阅读
- python - 无法使用 pip 卸载 python 包(Linux)
- c++ - 是否可以检查变量是否位于 L1/L2/L3 缓存中
- javascript - 无法移动口罩?无法获取掩码元素的 bbox
- postgresql - wal-g backup-push 尝试使用错误的数据库
- php - 有人可以帮我减少我的 php 代码吗?
- javascript - RXJS Observable MergeMap 链
- snakemake - Snakemake:如何指定 shell 命令的绝对路径
- python - 多索引失败
- cassandra-3.0 - Cassandra 集群缩减
- python - 查找所有单词,包括带有特殊字符的单词