首页 > 解决方案 > 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, {});
   }
}

标签: javascriptnode.jsmongodbacid

解决方案


推荐阅读