当我使用 npm run seeder
运行我的应用时
然后我遇到了这个错误
我已经仔细检查了我的数据库连接,没问题。
另外,我已经检查了我的 ordermodels 文件,它也可以。我用过 MongoDB 指南针没有任何问题。我不知道为什么显示 buffering timed out
。
MongooseError: Operation `orders.deleteMany()` buffering timed out after 10000ms
<块引用>
seeder.js
import mongoose from "mongoose";
import dotenv from "dotenv";
import colors from "colors";
import users from "./data/users.js";
import products from "./data/products.js";
import User from "./models/userModel.js";
import Product from "./models/productModel.js";
import Order from "./models/orderModel.js";
import connectDB from "./config/db.js";
dotenv.config();
connectDB();
const importData = async () => {
try {
await Order.deleteMany();
await Product.deleteMany();
await User.deleteMany();
const createUsers = await User.insertMany(users);
const adminUser = createUsers[0]._id;
const sampleProducts = products.map((product) => {
return { ...product, user: adminUser };
});
await Product.insertMany(sampleProducts);
console.log("Data Imported".green.inverse);
process.exit();
} catch (error) {
console.error(`${error}`.red.inverse);
process.exit(1);
}
};
const DeleteData = async () => {
try {
await Order.deleteMany();
await Product.deleteMany();
await User.deleteMany();
console.log("Data Deleted".red.inverse);
process.exit();
} catch (error) {
console.error(`${error}`.red.inverse);
process.exit(1);
}
};
if (process.argv[2] === "-d") {
DeleteData();
} else {
importData();
}
答案 0 :(得分:2)
我遇到了同样的问题,我刚刚做了一项研究,我发现您的 MongoDB 试图在连接数据库之前执行函数 User.deleteMany()
。
只需在 connectDB()
前放置一个 await;
await connectDB();
答案 1 :(得分:1)
使用以下代码连接到mongodb
const mongoose = require('mongoose')
mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })
之后,您应该删除 node_module 文件夹和所有 .json 文件并重新安装 mongoose 并使用 npm update
答案 2 :(得分:0)
我遇到了同样的问题,但我设法解决了。
所以在 package.json
中,我添加了 scripts
部分:
"data:import": "node backend/seeder",
"data:destroy": "node backend/seeder -d",
那么:
npm run data:import
尝试了几次后,我在控制台中收到了 Data Imported
消息。
注意:我没有卸载任何 node_modules。
答案 3 :(得分:0)
在 mongoose.connect(DB,{}) 中写入 useFindAndModify:true,因为默认情况下它是 false 并且您正在尝试从数据库中删除某些内容。 所以,这样写
mongoose.connect(DB,{
useNewUrlParser:true,
useCreateIndex:true,
useFindAndModify:true,
useUnifiedTopology: true
})
答案 4 :(得分:0)
您可以将connectDB() 移动到importData() 和deleteData()。并在 connectDB() 之前添加 await。像这样:
const importData = async () => {
try {
await connectDB();
//...
}
}
它对我有用。