不推荐使用服务器发现和监控引擎

IT技术 javascript node.js typescript mongodb mongoose
2021-03-04 18:15:57

我在 Node.js 应用程序中使用 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)
})

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

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

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

编辑

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

6个回答

更新

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

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

原答案

我面临同样的问题并决定深入研究 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选择加入 MongoDB 驱动程序的副本集和分片集群监控引擎。

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

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

我已经降级到 5.6.13,我的项目又恢复正常了。所以我现在看到的唯一选择是降级它并等待修复程序更新为更新版本。

5.7.7如果您使用createConnection()代替 ,最新的mongoose中存在一个错误connect(),例如mongoose.createConnection(conString, { useUnifiedTopology: true })useUnifiedTopology不会被考虑在内,您仍然会收到警告。事件与mongoose.set('useUnifiedTopology', true)我仍然收到警告。
2021-04-20 18:15:57
我也这么认为(降级版本),我使用的是 mlab 集群,所以这可能是警告没有消失的原因?
2021-04-26 18:15:57
我在使用本机 MongoDB 驱动程序时遇到该错误!
2021-04-29 18:15:57
这里我们有所有已弃用的选项:mongoosejs.com/docs/deprecations.html
2021-05-07 18:15:57
降级到 5.6.13 后警告仍然存在
2021-05-08 18:15:57

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

{ useUnifiedTopology:true }

mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
是的,这是正确的答案。您只需要将“useUnifiedTopology: true, useNewUrlParser: true”放在一对{ } 中。虽然我没有使用“useCreateIndex:true”,但它给了我一些想法。dev4life 的方式也有效。
2021-04-25 18:15:57
对于仍然收到消息的任何人,请尝试mongoose.set('useUnifiedTopology', true)在 mongoose.connect 之前致电
2021-04-27 18:15:57
mongoose .connect("db conn url", { useUnifiedTopology: true, useNewUrlParser: true, }) .then(() => console.log('MongoDB Connected!')) .catch(err => { err => console .log(err) }) 这对我有用
2021-05-01 18:15:57
如果您阅读我的问题,我会在那里提到我useUnifiedTopology: true在配置中添加的内容,但它仍然显示警告
2021-05-06 18:15:57
我遇到了这个问题,我也添加了useUnifiedTopology: true但控制台上仍然出现相同的消息。
2021-05-17 18:15:57

这解决了我的问题。

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

 const client = new MongoClient(url, {useUnifiedTopology: true});
感谢您的回答,但这是mongoose问题,我没有使用 mongoclient
2021-04-27 18:15:57
谢谢你的回答!正如您所提到的,由于在使用 mongoclient 而不是 mongoose 时提到的错误,我来到这里,有帮助!
2021-05-13 18:15:57
@iLiA 不客气。是的,我知道。但是这个答案可能对某人有帮助,因为我完全通过标题主题而不是内容找到了您的问题(并且您的问题内容非常接近有关 MongoClient 的一般信息)
2021-05-18 18:15:57
mongoose.connect('mongodb://localhost:27017/Tododb', { useNewUrlParser: true, useUnifiedTopology: true });

将删除以下错误:-

(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'), options: { useUnifiedTopology: true } }));
2021-04-20 18:15:57
@GaelMusikingala 这是我的问题。感谢您指出了这一点
2021-04-27 18:15:57
@GaelMusikingala,谢谢你救了我的命。❤️👏
2021-05-20 18:15:57

你可以试试异步等待

const connectDB = async () => {
    try {
        await mongoose.connect(<database url>, {
            useNewUrlParser: true,
            useCreateIndex: true,
            useUnifiedTopology: true,
            useFindAndModify: false
        });
        console.log("MongoDB Conected")
    } catch (err) {
        console.error(err.message);
        process.exit(1);
    }
};

使用 {useUnifiedTopology: true}
2021-05-07 18:15:57