Rah*_*ran 47 javascript mongoose mongodb node.js deprecation-warning
我只是从我的数据库创建一个名为 Fruits 的数据库app.js
,并使用 Mongoose 将数据库连接到 MongoDB。
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/fruitsDB", {useNewUrlParser: true});
mongoose.set('strictQuery', false);
const fruitSchema = new mongoose.Schema({
name: String,
rating: Number,
review: String
});
const Fruit = mongoose.model("Fruit", fruitSchema);
const fruit = new Fruit({
name: "Apple",
rating: 7,
review: "Taste Good"
});
fruit.save();
Run Code Online (Sandbox Code Playgroud)
每当我尝试时node app.js
,我都会收到DeprecationWarning。尽管我尝试使用mongoose.set('strictQuery', true);
,但同样的错误仍然存在,如下所示:
(node:15848) [MONGOOSE] DeprecationWarning: Mongoose: the `strictQuery` option w
ill be switched back to `false` by default in Mongoose 7. Use `mongoose.set('str
ictQuery', 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)
D:\Web Development\FruitsProject\node_modules\mongoose\lib\drivers\node-mongodb-
native\collection.js:158
const err = new MongooseError(message);
^
MongooseError: Operation `fruits.insertOne()` buffering timed out after 10000ms
at Timeout.<anonymous> (D:\Web Development\FruitsProject\node_modules\mongoo
se\lib\drivers\node-mongodb-native\collection.js:158:23)
at listOnTimeout (node:internal/timers:564:17)
at process.processTimers (node:internal/timers:507:7)
Node.js v18.12.1
Run Code Online (Sandbox Code Playgroud)
然后第二个错误也继续fruits.insertOne()。
因此,我的 MongoDB 数据库没有更新。
test> show dbs
admin 40.00 KiB
config 108.00 KiB
local 40.00 KiB
shopDB 72.00 KiB
Run Code Online (Sandbox Code Playgroud)
我只想修复这个错误。但我不知道在哪里修复这个错误。对于错误的第二部分,它似乎来自node_modules本身。我该如何修复这个错误?
Zeb*_*der 88
mongoose.set("strictQuery", false);
mongoose.connect(process.env.MONGO_URL);
Run Code Online (Sandbox Code Playgroud)
或者
mongoose.set("strictQuery", false);
mongoose.connect(process.env.MONGO_URL, () => {
console.log("Connected to MongoDB");
});
Run Code Online (Sandbox Code Playgroud)
mongoose.set("strictQuery", false);
mongoose.connect(process.env.MONGO_URL);
Run Code Online (Sandbox Code Playgroud)
Nen*_*vic 35
我想为现有答案提供更多背景信息。
当该strict
选项设置为true时,Mongoose 将确保只有架构中指定的字段才会保存在数据库中,而所有其他字段都不会被保存(如果发送了其他一些字段)。
目前,该选项默认启用,但在 Mongoose v7 中将默认更改为false 。这意味着所有字段都将保存在数据库中,即使其中一些字段未在架构模型中指定。
因此,如果您想要拥有严格的模式并仅在数据库中存储模型中指定的内容,从 Mongoose v7 开始,您必须手动将strict
选项设置为true。
mongoose.set('strictQuery', true);
mongoose.connect(Config.mongo_db_connection_string);
Run Code Online (Sandbox Code Playgroud)
如果您不想这样做,则不必指定任何内容,因为默认情况下它将设置为false。因此,您只需连接到数据库即可。
mongoose.connect(Config.mongo_db_connection_string);
Run Code Online (Sandbox Code Playgroud)
小智 5
const mongoose = require("mongoose");
mongoose.set('strictQuery', false);
mongoose.connect("mongodb://localhost:27017/fruitsDB", { useNewUrlParser: true });
const fruitSchema = new mongoose.Schema({
name: String,
rating: Number,
review: String
});
const Fruit = mongoose.model("Fruit", fruitSchema);
const fruit = new Fruit({
name: "Apple",
rating: 7,
review: "Taste Good"
});
fruit.save();
Run Code Online (Sandbox Code Playgroud)