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

iLi*_*LiA 28 mongoose mongodb node.js

我在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)
})
Run Code Online (Sandbox Code Playgroud)

但在控制台中它仍然会警告我

DeprecationWarning:不建议使用当前的“服务器发现和监视”引擎,并将在以后的版本中将其删除。要使用新的“服务器发现和监视”引擎,请将选项{useUnifiedTopology:true}传递给MongoClient构造函数。

有什么问题 我以前没有使用过useUnifiedTopology,但是现在它出现在控制台中,我添加了它,但它仍然给我这个错误。为什么?我什至不使用mongoClient。

编辑:

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

Fel*_*ets 30

更新资料

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

mongoose.connect(mongoConnectionString, {useUnifiedTopology: true});
Run Code Online (Sandbox Code Playgroud)

原始答案

我遇到了同样的问题,并决定深入研究猫鼬代码: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选择加入MongoDB驱动程序的副本集和分片群集监视引擎。

关于此错误,项目GitHub上也存在一个问题:https : //github.com/Automattic/mongoose/issues/8156

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

我已降级为5.6.13,我的项目恢复正常。因此,我目前看到的唯一选择是将其降级,并等待更新更新。

  • 如果您使用 `createConnection()` 而不是 `connect()`,例如 `mongoose.createConnection(conString, { useUnifiedTopology: true })`,则最新的 mongoose `5.7.7` 中存在一个错误。不会考虑“useUnifiedTopology”,您仍然会收到警告。事件“mongoose.set('useUnifiedTopology', true)”我仍然收到警告。 (3认同)
  • 降级到 5.6.13 后警告仍然存在 (2认同)

tam*_*n s 16

在mongoDB中,他们不赞成使用当前的服务器和引擎监视包,因此您需要使用新的服务器和引擎监视包。所以你只用

{useUnifiedTopology:true}

mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
Run Code Online (Sandbox Code Playgroud)

  • 如果您阅读了我的问题,我在那儿提到我在配置中添加了“ useUnifiedTopology:true”,它仍然向我显示警告 (4认同)
  • 对于仍然收到消息的任何人,请尝试在mongoose.connect之前调用`mongoose.set('useUnifiedTopology',true)`。 (4认同)
  • 我遇到了这个问题,我还添加了“ useUnifiedTopology:true”,但控制台上仍出现相同的消息。 (2认同)

*_*лов 16

这解决了我的问题。

 const url = 'mongodb://localhost:27017';

 const client = new MongoClient(url, {useUnifiedTopology: true});
Run Code Online (Sandbox Code Playgroud)

  • @iLiA 不客气。是的,我知道。但这个答案可能对某人有帮助,因为我完全通过标题主题而不是内容找到了您的问题(并且您问题的内容与有关 MongoClient 的一般信息非常接近) (5认同)

Has*_*zad 5

mongoose.connect('mongodb://localhost:27017/Tododb', { useNewUrlParser: true, useUnifiedTopology: true });
Run Code Online (Sandbox Code Playgroud)

将删除以下错误:-

(node:7481) DeprecationWarning: 当前 URL 字符串解析器已被弃用,并将在未来版本中删除。要使用新的解析器,请将选项 { useNewUrlParser: true } 传递给 MongoClient.connect。

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

  • 还要确保将 `useUnifiedTopology: true` 添加到使用 mongoDB 的所有依赖项中,在我的例子中,我使用的是 `wiston-mongodb`,我还必须将其添加到选项中 `winston.add(new winston.transports.MongoDB ({ db: config.get('db'), 选项: { useUnifiedTopology: true } }));` (3认同)