当前位置: 首页 > 知识库问答 >
问题:

node.js的MongoDB驱动程序,事务API,错误“client.startsession()不是函数”

宇文念
2023-03-14

我试图使用MongoDB驱动程序for Node.js创建事务。这是我的代码。

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)

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

共有2个答案

施驰
2023-03-14

基本上,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. ConnectCallback
  2. StartSession方法
吴康平
2023-03-14

您必须调用回调的“db”参数的startSession方法,如果连接成功,这就是包含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, db) {
    if (err) throw err;
    var session = db.startSession();
    console.log ('so far so good');
};

dbConnect ();
 类似资料:
  • 服务器上的mongodb版本将比驱动程序版本旧。我的java驱动程序版本是3.6,Mongo-版本显示我是2.4 我该怎么解决这个问题?

  • 问题内容: 我有一个使用mongodb本机驱动程序的node.js应用程序。在使用节点v8.9.1将应用程序代码迁移到异步/等待的过程中,我努力寻找一种适合mongodb查询的好方法。mongodb驱动程序的主要问题是,所有查询都使用回调,其中对异步方法来说,promise函数是必需的。 备择方案: 猫鼬 -承诺不赞成使用查询,它会强制使用Schema模型,这对我的应用程序来说有点开销。 mong

  • 本文向大家介绍Node.js事件驱动,包括了Node.js事件驱动的使用技巧和注意事项,需要的朋友参考一下 Node.js事件驱动实现概览 虽然在ECMAScript的标准里并没有(也没有必要)明确规定“事件”,但是在浏览器中,事件作为一个极为重要的机制,给予JavaScript响应用户操作与DOM变化的能力;在Node.js中,异步事件驱动模型则是其高并发能力的基础。 学习JavaScript也

  • 我有这个文件test.py: 我想使用此python代码从页面获取页面源。我使用的是chrome驱动程序selenium和python。但是当我启动这个脚本时,我遇到了这个错误: 我在互联网上尝试了几乎所有的解决方案,但每次我遇到其他错误时,有人知道我在这种情况下应该怎么做吗?有人建议我如何解决这个问题吗?

  • 问题内容: 我们当前的连接配置如下所示: 并且已在当前版本(源代码)中弃用,并将被删除:“此方法无法替代。使用connectTimeout属性控制连接超时。” 我认为重试和连接超时是两回事。有谁知道为什么改变了它以及它有什么(内部)含义? 问题答案: 关于autoConnectRetry的含义有很多困惑。大多数人认为这意味着,如果操作由于IOException而失败,驱动程序将重试该操作,直到ma

  • 我得到了下面的错误,如果我开始执行程序。 线程“main”org.openqa.selenium.remote.UnreachableBrowserException中的异常:无法启动新会话。可能的原因是远程服务器的地址无效或浏览器启动失败。构建信息:版本:“2.53.0”,修订版本:“35ae25b”,时间:“2016-03-15 16:57:40”