首页 > 解决方案 > node.js 的 MongoDB 驱动程序,事务 API,错误“client.startSession() 不是函数”

问题描述

我正在尝试使用 node.js 的 MongoDB 驱动程序来创建事务。这是我的代码。

const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb+srv://someone:someone@somecluster.xxxyy.mongodb.net/myFirstDatabase?retryWrites=true&w=majority";

function dbConnect () {
    callback = callbackTrans;
    MongoClient.connect (uri, callback);
};

function callbackTrans (err, db) {
    if (err) throw err;
    var session = MongoClient.startSession();
    console.log ('so far so good');
};

dbConnect ();

当然,这是不完整的代码。但是当我运行这个程序时出现以下错误......

D:\NodeJS\node_modules\mongodb\lib\topologies\replset.js:339
          throw err;
          ^

TypeError: MongoClient.startSession is not a function
    at callbackTrans (D:\NodeJS\transaction.js:11:31)
    at D:\NodeJS\node_modules\mongodb\lib\utils.js:693:5
    at D:\NodeJS\node_modules\mongodb\lib\mongo_client.js:227:7
    at connectCallback (D:\NodeJS\node_modules\mongodb\lib\operations\connect.js:366:5)      
    at D:\NodeJS\node_modules\mongodb\lib\operations\connect.js:602:5
    at ReplSet.connectHandler (D:\NodeJS\node_modules\mongodb\lib\topologies\replset.js:336:9)
    at Object.onceWrapper (events.js:422:26)
    at ReplSet.emit (events.js:315:20)
    at D:\NodeJS\node_modules\mongodb\lib\core\topologies\replset.js:796:18
    at processTicksAndRejections (internal/process/task_queues.js:75:11)

我错过了什么/做错了什么?谢谢。

标签: node.jsmongodb

解决方案


基本上,MongoClient.startSession();是无效的,因为startSession()它不是静态方法,MongoClient而是应该在客户端实例本身上调用的实例方法。MongoClient.connect()将在回调中传递客户端实例,您应该使用它来调用startSession()它。

尝试这个:

const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb+srv://someone:someone@somecluster.xxxyy.mongodb.net/myFirstDatabase?retryWrites=true&w=majority";

function dbConnect () {
    callback = callbackTrans;
    MongoClient.connect (uri, callback);
};

function callbackTrans (err, client) {
    if (err) throw err;
    var session = client.startSession();
    console.log ('so far so good');
};

dbConnect();

参考:

  1. 连接回调
  2. 开始会话方法

推荐阅读