mongodb no guarda todos los datos

Necesito insertar alguna matriz en mongodb, así que escribí el siguiente código simple

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(); }) 

cuando veo el registro, se imprimió que se insertaron demasiados registros, como 50,000, pero cuando uso mongodb para contar la cantidad de registros, se muestra menos, algo cerca de 1,000 registros.

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

¿Dónde está el problema?

Su código asíncrono es defectuoso y su línea db.close() se ejecuta antes de que se hayan completado todos sus comandos de insert asíncrona. Debe controlar el flujo de su progtwig a A) no tener un millón de inserciones de base de datos simultáneas ocurriendo / en cola y B) esperar hasta que Mongo las haya procesado antes de cerrar la conexión. Considere una biblioteca auxiliar como async.forEach para ayudar con esto si no quiere codificarlo usted mismo.