服务器发现和监视引擎已弃用

我正在将猫鼬与我的Node.js应用程序一起使用,这是我的配置:

mongoose.connect(process.env.MONGO_URI, {
   useNewUrlParser: true,
   useUnifiedTopology: true,
   useCreateIndex: true,
   useFindAndModify: false
}).then(()=>{
    console.log(`connection to database established`)
}).catch(err=>{
    console.log(`db error ${err.message}`);
    process.exit(-1)
})

但在控制台中,它仍然给我警告:

弃用警告:当前服务器发现和监视引擎已弃用,并将在将来的版本中删除。若要使用新的服务器发现和监视引擎,请将选项 { useUnifiedTopology: true } 传递给 MongoClient 构造函数。

问题出在哪里?我以前没有使用过,但现在它显示在控制台中。我将其添加到配置中,但它仍然给我这个警告,为什么?我甚至不使用.useUnifiedTopologyMongoClient

编辑

正如Felipe Plets的回答一样,Mongoose中存在一个问题,他们在以后的版本中修复了这个错误。因此,您可以通过更新猫鼬版本来解决问题。


答案 1

更新

Mongoose 5.7.1已经发布,似乎可以解决此问题,因此设置选项可以按预期工作。useUnifiedTopology

mongoose.connect(mongoConnectionString, {useNewUrlParser: true, useUnifiedTopology: true});

原始答案

我遇到了同样的问题,并决定深入研究猫鼬代码:https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

似乎是在Mongoose的5.7版本上添加的一个选项,尚未有很好的文档记录。我甚至找不到图书馆历史中提到的 https://github.com/Automattic/mongoose/blob/master/History.md

根据代码中的注释:

  • 默认情况下,@param {Boolean} [options.useUnifiedTopology=false] False。设置为 以选择加入 MongoDB 驱动程序的副本集和分片群集监视引擎。true

GitHub 项目上还有一个关于此错误的问题:https://github.com/Automattic/mongoose/issues/8156

在我的情况下,我不会在副本集或分片集群中使用Mongoose,尽管该选项应该是假的。但是,如果它是假的,它抱怨设置应该是真的。一旦是真的,它仍然不起作用,可能是因为我的数据库不在副本集或分片集群上运行。

我已降级到5.6.13,我的项目恢复正常工作。因此,我现在看到的唯一选择是将其降级并等待修复程序更新为较新版本。


答案 2

在mongoDB中,他们弃用了当前的服务器和引擎监控包,因此您需要使用新的服务器和引擎监控包。所以你只是使用

{ useUnifiedTopology:true }

mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });