我在 node 上使用Mongoose.这是我的配置:

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)
})

但在控制台上,它仍然给我一个警告:

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

有什么问题吗?我以前没有使用useUnifiedTopology,但现在它显示在控制台上.我把它添加到配置中,但它仍然给我这个警告,为什么?我甚至不用MongoClient.

编辑

Felipe Plets回答说mongoose 有问题,他们在以后的版本中修复了这个错误.所以你们可以通过更新mongoose 版本来解决这个问题.

推荐答案

Update

Mongoose 5.7.1已经发布,似乎已经解决了这个问题,所以设置useUnifiedTopology选项可以如期工作.

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

Original answer

我也面临同样的问题,决定深入研究mongoose 的代码: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.设置为true可 Select 加入MongoDB驱动程序的副本集和分片群集监控引擎.

GitHub项目中也有一个关于这个错误的问题:https://github.com/Automattic/mongoose/issues/8156

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

我已经降级到5.6.13,我的项目恢复正常.因此,我现在看到的唯一 Select 是降级,等待修复程序更新为新版本.

Node.js相关问答推荐

CloudTasksClient在Firebase Function % s onDocumentCreated中实例化时导致错误

如何使用NodeJS在mongodb中更新文档

我如何在 Raku 的供应中注册不同的事件?

如何在mongodb中获取对象数组内部的数据

简单的 Node js 程序但执行顺序似乎不同?

我怎样才能让`git`失败而不是要求提供凭据

NodeJS 后端发布请求将数据作为NULL值发布到 SQL Server 表

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

Winston http 日志(log)级别的行为与 info 不同

如何在 TypeScript 中输出 Hackerrank 二叉树问题?

Firestore promise 在退货前等待产品详细信息

Node.js、Cygwin 和 Socket.io 走进一家wine 吧……Node.js 抛出 ENOBUFS,所有人都死了

Node.js 服务器中没有缓存

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

已安装全局 NPM 包但未找到命令

如何从 npm 注册表中删除 npm 包?

我可以有条件地将 where() 子句添加到我的 knex 查询吗?

chart.js 无法创建图表:无法从给定项目获取上下文

node.js 在控制台上显示未定义

AWS Lambda:如何将秘密存储到外部 API?