2

我需要在 mongodb 中插入一些矩阵,所以我编写了简单的以下代码

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

当我看到日志时,它打印出插入的记录太多,比如 50,000 条,但是当我使用 mongodb 计算记录量时,它显示的更少,接近 1,000 条记录。

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

哪里有问题?

4

1 回答 1

3

您的异步代码有缺陷,并且您的db.close()行在异步insert命令全部完成之前执行。你需要控制你的程序流到 A)没有一百万个并发数据库插入发生/排队和 B)等到它们都被 mongo 处理后再关闭连接。async.forEach如果您不想自己编写代码,请考虑使用帮助程序库来帮助解决此问题。

于 2013-07-14T08:10:54.920 回答