我在 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)
})
但在控制台中它仍然给我警告:
DeprecationWarning:当前的服务器发现和监控引擎已被弃用,并将在未来版本中删除。要使用新的服务器发现和监控引擎,请将选项 { useUnifiedTopology: true } 传递给 MongoClient 构造函数。
问题是什么?我没有使用useUnifiedTopology
以前但现在它显示在控制台中。我将其添加到配置中,但它仍然给我这个警告,为什么?我什至不使用MongoClient
.
Edit
正如 Felipe Plets 所回答的那样,Mongoose 存在一个问题,他们在以后的版本中修复了这个错误。所以你可以通过更新 mongoose 版本来解决问题。
Update
Mongoose 5.7.1 已发布,似乎解决了该问题,因此设置useUnifiedTopology
选项按预期工作。
mongoose.connect(mongoConnectionString, {useNewUrlParser: true, useUnifiedTopology: true});
原答案
我面临着同样的问题,并决定深入研究 Mongoose 代码:
似乎是 Mongoose 5.7 版本中添加的一个选项,但尚未有详细记录。我什至找不到图书馆历史中提到的它https://github.com/Automattic/mongoose/blob/master/History.md 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 https://github.com/Automattic/mongoose/issues/8156
就我而言,我不在副本集或分片集群中使用 Mongoose,尽管该选项应该为 false。但如果为 false,它会抱怨设置应该为 true。一旦是真的,它仍然不起作用,可能是因为我的数据库没有在副本集或分片集群上运行。
我已经降级到 5.6.13,我的项目又恢复正常工作了。因此,我现在看到的唯一选择是降级并等待修复程序更新为新版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)