MongoDb批量插入限制问题

时间:2014-02-20 11:44:40

标签: javascript node.js mongodb

我是mongo和node的新手。我试图将csv上传到mongodb。

步骤包括:

  1. 阅读csv。
  2. 将其转换为JSON。
  3. 将它推到mongodb。
  4. 我使用'csvtojson'模块将csv转换为json并使用代码推送它:

    MongoClient.connect('mongodb://127.0.0.1/test', function (err, db) { //connect to mongodb   
        var collection = db.collection('qr');
        collection.insert(jsonObj.csvRows, function (err, result) {
            console.log(JSON.stringify(result));
            console.log(JSON.stringify(err));
        });
        console.log("successfully connected to the database");
        //db.close();
    });
    

    此代码适用于csv,大小为4mb;不仅仅是它不起作用。

    我试图控制错误

    console.log(JSON.stringify(err));
    

    它返回{}

    注意:我的是32位系统。

    是否因为32位系统的文件限制为4mb?

    我遇到的情况是我无法限制csv文件中的大小和no.of属性(即,代码将处理各种csv文件)。那怎么处理呢?我有可用的模块吗?

2 个答案:

答案 0 :(得分:2)

如果您在将csv解析为JSON时没有遇到问题(可能您不是这样),那么可能只是限制传递给insert的列表大小。

正如我所看到的,.csvRows元素是一个数组,所以不是一次发送所有元素,而是将其切片并批量调用insert中的元素。似乎元素的数量是问题的原因而不是大小。将数组拆分成几个插入而不是1应该有所帮助。

尝试500,然后1000,依此类推,直到找到一个快乐的媒介。

编码的类别:

var batchSize = 500;
for (var i=0; i<jsonObj.csvRows.length; i += batchSize) {
    var docs = jsonObj.csvRows.slice(i, i+(batchSize -1));
    db.collection.insert( docs, function(err, result) {
        // Also don't JSON covert a *string*
        console.log(err);

        // Whatever
    }
}

chunks这样做。

答案 1 :(得分:0)

您可以将这些数据作为元素数组生成,然后只需使用MongoDB插入函数,将此数组传递给插入函数