MongoDB只存储61246个文件?

时间:2014-11-12 03:30:48

标签: node.js mongodb

我对MongoDB很新,并且在通过NodeJs将大量文档插入到我的集合中时遇到了一些问题。

我有一个要插入同一个集合的文件列表(全部低于100kb)。我使用以下代码:

var files = walkFolder(base);
var url = 'mongodb://localhost:27017/enron';

MongoClient.connect(url, function(err, db) {
    if (err) { throw err;}
    var collection = db.collection('emails');
    async.each(files, function(item, callback){
            var document = readEmail(item);
            collection.insert(document, function(err, result) {
                    console.log(result);
                    callback(err);
            });
    });
});

walkFolder()创建一个文件列表,readEmail()将单个文件解析为JSON对象(只是一些属性,没有嵌入的文档或其他东西)

我可以执行我的程序,它可以很快地运行。但总是在集合中的61246个文档中(通过> db.emails.find().count()检查),计数不再增加。

知道为什么会发生这种情况或如何追踪它? 一些版本:MacOS 10.9.5,NodeJs 0.10.31,MongoDB驱动程序1.4.19,MongoDB 2.6.5

1 个答案:

答案 0 :(得分:1)

async.each并行地将迭代器函数应用于每个files元素。如果files很大,您可以通过尝试一次完成所有操作来耗尽各种资源。相反,使用async.eachLimit一次只处理N个元素。

例如,要将处理限制为一次不超过10个正在进行的文件,请将async.each来电替换为:

async.eachLimit(files, 10, function(item, callback){ ...