mongodb不保存所有数据

我需要在MongoDB中插入一些matrix,所以我写了简单的下面的代码

var MongoClient = require('mongodb').MongoClient; var matrisMaker = function(d1,d2){ var result = new Array(); for (var i = 0;i < d1;i++){ result.push(new Array()); for (var k = 0;k < d2;k++){ result[i].push(Math.round(Math.random() * 1000000000000)); } } return result; }; MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { if(err) throw err; var collection = db.collection('matris'); for (var counter = 0;counter < 10000000;counter++){ var insertObject = { 'matrisA':matrisMaker(20,20), 'matrisB':matrisMaker(20,20), 'resultA':new Object(), 'resultB':new Object() }; collection.insert(insertObject, function(err, docs) { if (err) throw err; }); delete insertObject; if ((counter % 1000) == 0) console.log(counter); } db.close(); }) 

当我看到日志的时候,打印的插入的logging太多了,比如5万,但是当我用mongodb来logginglogging数量的时候,它显示的数量更less,大约有1000条logging。

 >use test; >db.matris.count(); 

哪里有问题?

你的asynchronous代码有缺陷,你的db.close()行在asynchronousinsert命令全部完成之前执行。 你需要控制你的程序的stream向:A)没有100万个并发的数据库插入发生/排队,B)等到他们全部被mongo处理之后再closures连接。 考虑一个像async.forEach这样的辅助函数库来帮助你,如果你不想自己编写代码的话。