mongodb 弃用警告:Mongoose:在Mongoose 7中,"strictQuery"选项将默认切换回"false

hmmo2u0o  于 2022-12-26  发布在  Go
关注(0)|答案(9)|浏览(691)

我只是从我的app.js中创建一个名为Fruits的数据库,并使用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();

每当我尝试使用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

然后第二个错误也继续fruits.insertOne()
正因为如此,我的MongoDB数据库没有得到更新。

test> show dbs
admin    40.00 KiB
config  108.00 KiB
local    40.00 KiB
shopDB   72.00 KiB

我只是想修复这个错误。但是我不知道在哪里修复这个错误。错误的第二部分似乎来自nodule_modules本身。我该如何修复这个错误?

liwlm1x9

liwlm1x91#

mongoose.set("strictQuery", false);

mongoose.connect(process.env.MONGO_URL);

mongoose.set("strictQuery", false);
mongoose.connect(process.env.MONGO_URL, () => {
  console.log("Connected to MongoDB");
});
jbose2ul

jbose2ul2#

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();
gev0vcfq

gev0vcfq3#

欢迎来到StackOverflow。
弃用警告与您收到的错误没有任何关系。尝试删除整个mongoose.set('strictQuery', true);行,您将得到相同的结果。
尝试将localhost替换为127.0.0.1,并让我知道它是否有效。

mongoose.connect('mongodb://127.0.0.1/fruitsDB')

另外,您使用的是哪个版本的mongoose和MongoDB?

flseospp

flseospp4#

仅用一行删除此警告

mongoose.set('strictQuery', true);
mongoose.connect(process.env.MONGO_URL)

单线

mutmk8jj

mutmk8jj5#

第一个月
mongoose.set('strictQuery', true);
即使包含strictQuery行,上面也会给出警告,解决方案只是将strictQuery行放在mongoose.connect之前
mongoose.set('strictQuery', true);
mongoose.connect(process.env.MONGO_URL);
那就成功了!

shstlldc

shstlldc6#

第一个错误的解决方案。
您可以参考命令行指令本身,只是在使用mongoose之前使用建议的行。
只需更换:

mongoose.connect("mongodb://localhost:27017/fruitsDB", {useNewUrlParser: true});

收件人:

mongoose.set('strictQuery',false);
mongoose.connect("mongodb://localhost:27017/fruitsDB",{useNewUrlParser: true});
pu82cl6c

pu82cl6c7#

我想给现有的答案多一点背景。
strict选项设置为true时,Mongoose将确保只有在Schema中指定的字段才会保存在数据库中,而所有其他字段都不会保存(如果发送了其他字段)。
现在,默认情况下启用此选项,但在Mongoose v7中,默认情况下将更改为false,这意味着所有字段都将保存在数据库中,即使其中一些字段没有在Schema模型中指定。
因此,如果您希望拥有严格的Schemas,并且只在数据库中存储模型中指定的内容,那么从Mongoose v7开始,您必须手动将strict选项设置为true

mongoose.set('strictQuery', true);
mongoose.connect(Config.mongo_db_connection_string);

如果你不想这样,你不需要指定任何东西,因为默认情况下它会被设置为false,所以你可以直接连接到数据库,就这样。

mongoose.connect(Config.mongo_db_connection_string);
2izufjch

2izufjch8#

我在Udemy上也学了同样的课程,哈菲兹的解决方案对我很有效。
只需更换

mongoose.connect('mongodb://localhost:27017/fruitsDB', {useNewUrlParser: true});

mongoose.set('strictQuery', true);
mongoose.connect('mongodb://127.0.0.1/fruitsDB');
r1zk6ea1

r1zk6ea19#

mongoose.connect('mongodb://0.0.0.0/fruitsDB')

我想我们在做同样的事情。我只是忽略了 Mongoose 的反对警告。

相关问题