Javascript 在Node.js中连接MongoDB不在for循环中工作

Javascript 在Node.js中连接MongoDB不在for循环中工作,javascript,node.js,mongodb,asynchronous,Javascript,Node.js,Mongodb,Asynchronous,我有一个连接本地mongoDB数据库的函数,但是当我尝试将它放入for循环时,连接突然不起作用 var connectMongo = require("./ConnectToMongoDB"); var insertDocument = require("./InsertDocument"); function spamMongoDBtest(){ process.nextTick(function(){ var max = 500;

我有一个连接本地mongoDB数据库的函数,但是当我尝试将它放入for循环时,连接突然不起作用

var connectMongo = require("./ConnectToMongoDB");
var insertDocument = require("./InsertDocument");

function spamMongoDBtest(){
      process.nextTick(function(){
            var max = 500;
            for(var i = 0; i<max;i++){
                  setTimeout(function(){
                              connectMongo(insertDocument);
                        }, 50);
            }
      });
}

您是否也可以共享
connectMongo
insertDocument
功能? 也许您与Mongo的开放连接太多了。每次编写文档后,请尝试关闭与Mongo的连接

您可以使用
async
库来限制测试的并发性

例如:

var concurrency = 25; //limit to 25 concurrent connections
async.eachLimit(new Array(500), concurrency, function(item, callback) {
  connectMongo(function(){
    insertDocument();
    callback();
  });
});

您从MongoDb收到连接错误,因为您尝试多次连接到数据库。您只需要连接到数据库一次,从那一刻起,如果已建立连接,则与数据库的通信将打开

您正在打开连接,一旦打开,就可以与数据库通信

var mongoURI = "mongodb://localhost:3030/";
var MongoDB = mongoose.connect(mongoURI).connection;
MongoDB.on('error', function(err) { console.log(err.message); });
MongoDB.once('open', function() {
  console.log("mongodb connection open");
  insertDocument;
});
open
功能中,您可以触发
setInterval
。或者,如果您想继续使用代码,那么每次在for循环中打开连接时,您也必须关闭它。我不知道
connectMongo
方法包含什么,但在
setTimeout
方法之外调用此方法后,必须关闭连接。但无论如何,这种方法都会给服务器带来沉重的负担,因此我的建议是遵循提供的方法

var mongoURI = "mongodb://localhost:3030/";
var MongoDB = mongoose.connect(mongoURI).connection;
MongoDB.on('error', function(err) { console.log(err.message); });
MongoDB.once('open', function() {
  console.log("mongodb connection open");
  insertDocument;
});