(node:63208)不推荐使用DeprecationWarning:collection.ensureIndex.请改用createIndexes

adi*_*mar 34 mongoose mongodb node.js

这个错误来自哪里?我没有在任何地方使用ensureIndexcreateIndex在我的Nodejs应用程序中.我正在使用纱线包经理.

这是我的代码 index.js

import express from 'express';
import path from 'path';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import Promise from 'bluebird';

dotenv.config();
mongoose.Promise = Promise;
mongoose.connect('mongodb://localhost:27017/bookworm', { useNewUrlParser: true });

const app = express();
Run Code Online (Sandbox Code Playgroud)

小智 59

问题是mongoose仍然使用collection.ensureIndex,并且应该在不久的将来由他们更新.要删除消息,可以使用package.json中的5.2.8版降级(并删除任何缓存,最后的方法是卸载它,使用npm install mongoose@5.2.8安装它):

"mongoose":"^ 5.2.8"

编辑: 在编辑中,Mongoose现在是v5.4.13.根据他们的文档,这些是弃用警告的修复程序......

mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
Run Code Online (Sandbox Code Playgroud)

用updateOne(),updateMany()或replaceOne()替换update()

用deleteOne()或deleteMany()替换remove().

将count()替换为countDocuments(),除非您想要计算整个集合中有多少文档(没有过滤器).在后一种情况下,使用estimatedDocumentCount().

  • 使用它来连接数据库。mongoose.connect("你的数据库 URL", { useNewUrlParser: true, useCreateIndex: true }); (21认同)
  • 我个人认为应该不管它.这是一个弃用*警告*,你不应该这么烦,因为代码仍然有效,并将在不久的将来升级 (10认同)
  • 我在使用 mongoose 5.9.5 时遇到了同样的问题,我通过将连接修改为以下内容解决了错误: mongoose.connect(dbUri, {useUnifiedTopology: true, useCreateIndex: true, useNewUrlParser: true}); (9认同)
  • @cr05s19xx 不是真的。因为现在已经2020年了,警告依然存在。我正在使用 Mongoose 5.10.11 (4认同)