使用Mongoose和node.js创建会话时出错

使用Mongoose和node.js创建会话时出错,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图使用mongoose和node.js管理跨国数据,但在创建会话时,它抛出了以下错误 错误: TypeError: session.startTransaction is not a function at DemoProjectService.transferBalance (/home/anil/Desktop/subhrajyoti/project/demo1/service/account.service.js:32:21) at <anonymous>

我试图使用mongoose和node.js管理跨国数据,但在创建会话时,它抛出了以下错误

错误:

TypeError: session.startTransaction is not a function
    at DemoProjectService.transferBalance (/home/anil/Desktop/subhrajyoti/project/demo1/service/account.service.js:32:21)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)

这里我想管理一些过渡记录,但是得到了上面的错误。谁能帮我解决这个错误。

如果你用
mongooseInstance.createConnection
而不是
mongooseInstance.connect
?我不测试它。如果你用
mongooseInstance.createConnection
而不是
mongooseInstance.connect,它的行为是否相同?我不测试它。
async transferBalance(req,res) {

        let conn = null;

        try{

            conn = await connectMasterDb();

            if(_.isNull(conn)) {
                return false;
            }

            let from = req.body.from;
            let to = req.body.to;
            let amount = req.body.amount;

            const customerCollection = loadMongoModel('Account');

            const session = conn.startSession();
            session.startTransaction();

            const opts = { session, new: true };
            const A = await customerCollection.findOneAndUpdate({ name: from }, { $inc: { balance: -amount } }, opts);
            if (A.balance < 0) {
              // If A would have negative balance, fail and abort the transaction
              // `session.abortTransaction()` will undo the above `findOneAndUpdate()`
              throw new Error('Insufficient funds: ' + (A.balance + amount));
            }
            const B = await customerCollection.findOneAndUpdate({ name: to }, { $inc: { balance: amount } }, opts);

            await session.commitTransaction();
            session.endSession();

            conn.disconnect();

            if (_.isEmpty(A) && _.isEmpty(B)) {
                return [];
            }else{
                return { from: A, to: B };
            }
        }catch(error) {
            console.log(error);
            return false;
        }
    }
const Mongoose = require('mongoose').Mongoose,
      fs = require('fs'),
      { ObjectID } = require('mongodb');




class DemoProjectMongo {

    async _connect() {

        this.dbInstance = null;
        const mongooseInstance = new Mongoose();
        const mongodebug = false;

        const url = `mongodb://admin:admin@localhost:27017/practice`;

        const options = {
            useNewUrlParser: true,
            useCreateIndex: true,
            connectTimeoutMS: 5000000,
            poolSize: 10000,
            useUnifiedTopology: true,
            // autoIndex: false
        };

        this.dbInstance = await mongooseInstance.connect(url, options);
        mongooseInstance.set('bufferCommands', false);
        mongooseInstance.set('useFindAndModify', false);
        if(mongodebug === true) {
            mongooseInstance.set('debug', true);
        }

        return this.dbInstance;

    }

    async connectMasterDb() {
        return await this. _connect();
    }

    collection(collectionName) {

        try{

            const path_name = '/home/anil/Desktop/subhrajyoti/project/demo1/model';
            const model = `${path_name}/${collectionName}.model.js`;

            if (fs.existsSync(model)) {
                let SchemaModel = require(model);
                return this.dbInstance.model(collectionName, SchemaModel);
            }

        }catch(error) {
            console.log(error);
        }
    }

    isObjectID(value) {
        let response = value;
        if (_.isArray(response)) {
            response = _.map(response, res => {
                if (ObjectID.isValid(res)) {
                    return new ObjectID(res);
                }
                return res;
            });
        } else if (ObjectID.isValid(response)) {
            response = new ObjectID(response);
        }

        return response;
    }
}

const edQartMongoUtil = new DemoProjectMongo();

module.exports = {
    loadMongoModel: edQartMongoUtil.collection.bind(edQartMongoUtil),
    connectMasterDb: edQartMongoUtil.connectMasterDb.bind(edQartMongoUtil),
    isObjectID: edQartMongoUtil.isObjectID.bind(edQartMongoUtil)
}