mongodb Mongoose 错误:10000ms后缓冲区超时

kgqe7b3p  于 2022-11-03  发布在  Go
关注(0)|答案(6)|浏览(326)

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

t9aqgxwy1#

我也有同样的问题,我刚刚做了一项研究,我发现你的MongoDB试图在数据库连接之前执行函数User.deleteMany()
只需在connectDB()之前放置一个await;

await connectDB();
sxpgvts3

sxpgvts32#

=(((((=(((((((((((((((((
请尝试{

await connectDB();

await Category.collection.deleteMany({});

await Category.insertMany(categoryData);

console.log('Success ');

} catch(错误){

console.log('error in processing data ', error);

}
};
导入数据();

wdebmtf2

wdebmtf23#

使用以下代码连接到mongodb

const mongoose = require('mongoose')
mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })

之后,您应该删除node_module文件夹和所有的.json文件,重新安装mongoose并使用npm update

3htmauhk

3htmauhk4#

我也遇到过同样的问题,但我设法解决了。
所以在package.json中,在scripts部分我添加了:

"data:import": "node backend/seeder",
"data:destroy": "node backend/seeder -d",

然后道:

npm run data:import

在尝试了几次之后,我在控制台中得到了Data Imported消息。
注意:我没有卸载任何node_modules。

a14dhokn

a14dhokn5#

在mongoose.connect(DB,{})中写入useFindAndModify:true,因为默认情况下它是false,而您正试图从数据库中删除某些内容。

mongoose.connect(DB,{
    useNewUrlParser:true,
    useCreateIndex:true,
    useFindAndModify:true,
    useUnifiedTopology: true
})
hk8txs48

hk8txs486#

您可以将connectDB()移动到importData()和deleteData()中,并在connectDB()之前添加await。如下所示:

const importData = async () => {
    try {
        await connectDB();
        //...
    }
}

对我很有效。

相关问题