MongooseError:操作 `orders.deleteMany()` 缓冲在 10000 毫秒后超时

时间:2021-01-06 16:43:27

标签: node.js mongodb express mongoose

当我使用 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();
    }

5 个答案:

答案 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();
        //...
    }
}

它对我有用。