如何修复Mongoose关于"strictQuery"的弃用警告

19

当我开始构建我的后端服务器时,我收到了这个弃用警告,但它显示我已连接到数据库。

文件 server.js

const dotenv = require('dotenv');
const mongoose = require('mongoose');
const app = express();
dotenv.config();

mongoose
  .connect(process.env.MONGODB_URI)
  .then(() => {
    console.log('connected to db');
  })
  .catch((err) => {
    console.log(err.message);
  });

const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`serve at http://localhost:${port}`);
});

文件 package.json

{
  "name": "backend",
  "version": "1.0.0",
  "description": "backend",
  "main": "server.js",
  "scripts": {
    "start": "node server",
    "dev": "nodemon server"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "mongoose": "^6.8.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.20"
  }
}

这是Mongoose的弃用警告:

Mongoose弃用警告截图

它显示:

[MONGOOSE] DeprecationWarning: Mongoose: the `strictQuery` option will be switched back to `false` by default in Mongoose 7. 
Use `mongoose.set('strictQuery', false);` if you want to prepare for this change. 
Or use `mongoose.set('strictQuery', true);` to suppress this warning.
(Use `node --trace-deprecation ...` to show where the warning was created)

1
抱歉,这是警告:(node:21244) [MONGOOSE] DeprecationWarning: Mongoose: the strictQuery option will be switched back to false by default in Mongoose 7. Use mongoose.set('strictQuery', false); if you want to prepare for this change. Or use mongoose.set('strictQuery', true); to suppress this warning. - DummyData1590
你的MongoDB URL是什么?你能发布一下吗? - Dhaval Italiya
"node:8392" 中的 8392 是什么?是 (TCP) 端口号吗? - Peter Mortensen
@PeterMortensen 这是一个进程ID。 - OneCricketeer
@PeterMortensen 这是一个pid。 - OneCricketeer
@PeterMortensen 这是一个pid。 - undefined
6个回答

34

为了提醒用户Mongoose 7默认值strictQuery将被更改,此警告已引入。
该默认值将恢复为false

您可以通过以下方式之一全局设置strictQuery选项为true以消除警告:

const dotenv = require('dotenv');
const mongoose = require('mongoose');
const app = express();
dotenv.config();

mongoose.set('strictQuery', true);

如果您想覆盖当前的strictQuery行为并为新版本做准备,请将标志设置为false

const dotenv = require('dotenv');
const mongoose = require('mongoose');
const app = express();
dotenv.config();

mongoose.set('strictQuery', false);

无论哪种方式,警告都应该消失。

有关为什么 strictQuery 将默认设置为 false 的更多信息,请参见此处。 有关 strictQuery 的更多信息,请参见此处


1

在连接到MongoDB服务器之前添加mongoose.set('strictQuery', false);。

mongoose.set('strictQuery', false);
  const conn = await mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
 useUnifiedTopology: true,
});

“where you user connecting the MongoDB server” 看起来不太容易理解。你能修正一下吗 - Peter Mortensen
这个回答相比最受赞同的回答有什么优势?https://dev59.com/PFEG5IYBdhLWcg3wHENp#74713539 - OneCricketeer
这个回答相比最受赞同的回答有什么新的内容?https://dev59.com/PFEG5IYBdhLWcg3wHENp#74713539 - OneCricketeer
@PeterMortensen 这只是一个警告。 尽管您收到了此警告,但您的MongoDB将会连接并按预期工作。 - Dhaval Italiya
@PeterMortensen 这只是一个警告。 尽管你收到了这个警告,但你的Mongo数据库将会正常连接和工作。 - Dhaval Italiya
@PeterMortensen 这只是一个警告。 尽管你收到了这个警告,但你的MongoDB将会正常连接和工作。 - undefined

0
Mongoose支持单独的strictQuery选项,以避免查询过滤器的严格模式。这是因为空查询过滤器会导致Mongoose返回模型中的所有文档,可能会引起问题。
提供mongoose.set('strictQuery',true);来解决您的问题。
    const dotenv = require('dotenv');
const mongoose = require('mongoose');
const app = express();
dotenv.config();

mongoose.set('strictQuery', true);

mongoose
  .connect(process.env.MONGODB_URI)
  .then(() => {
    console.log('connected to db');
  })
  .catch((err) => {
    console.log(err.message);
  });

const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`serve at http://localhost:${port}`);
});

0

在浏览器中打开 MongoDB 页面,进入网络访问。然后点击添加IP地址按钮,并添加地址“0.0.0.0”。

这将有助于您连接。


弃用通知与允许的客户端或任何服务器配置无关。此外,警告发生时未使用Atlas或任何云托管的Mongo。 - OneCricketeer
废弃通知与允许客户端或任何服务器配置无关。此外,该警告在不使用Atlas或任何云托管Mongo情况下发生。 - OneCricketeer
废弃通知与允许的客户端或任何服务器配置无关。此外,即使不使用Atlas或任何云托管的Mongo,也会发出警告。 - undefined

-1
我添加了mongoose.set('strictQuery', true)然后消息消失了。

1
请查看 *为什么在提问时不上传代码/错误的图片?(例如,"图片应该只用于说明无法以其他方式清晰表达的问题,例如提供用户界面的截图。"*)并做正确的事情(它也涵盖了回答)。提前致谢。 - Peter Mortensen
我已经删除了图片,因为只有代码行是必要的...这比得到最多赞的答案有什么优势吗?https://dev59.com/PFEG5IYBdhLWcg3wHENp#74713539 - OneCricketeer
我已经删除了图片,因为只有代码行是必要的...这个回答相比最受赞同的回答有什么额外的内容?https://dev59.com/PFEG5IYBdhLWcg3wHENp#74713539 - OneCricketeer

-2

你可以尝试一下...

const dbSetup = async () => {
  try {
    const DBURL = process.env.DB_URL;
    mongoose.set("strictQuery", false);
    mongoose.connect(DBURL, {
      useNewUrlParser: true,
      ssl: true,
      sslValidate: false,
    });
  } catch (err) {
    console.log("Databse Connection Error : " + err.message);
  }
};

2
你的回答可以通过提供更多支持信息来改进。请[编辑]以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接