【问题标题】:MongoDb bulk insert limit issueMongoDb 批量插入限制问题
【发布时间】:2017-06-26 18:02:32
【问题描述】:

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

步骤包括:

  1. 读取 csv。
  2. 将其转换为 JSON。
  3. 将其推送到 mongodb。

我使用 '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();
});

此代码适用于最大 4mb 的 csv;不仅如此,它还不起作用。

我试图解决这个错误

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

它返回了{}

注意:我的是32位系统。

是不是因为 32 位系统有 4mb 的文档限制?

我处于无法限制 csv 文件中属性的大小和数量的情况(即,代码将处理各种类型的 csv 文件)。那么如何处理呢?我有可用的模块吗?

【问题讨论】:

  • 我认为collection.insert 方法要求回调是第三个参数,你的console.log 甚至被执行了吗?
  • @MDG 它正在被执行。如果插入,我会得到结果。在不插入的情况下会产生“未定义”结果
  • 啊,当你超过 4mb 时会发生这种情况。我明白了。
  • 是的。我的问题是是否有解决方法。如果不是如何找到我们可以处理的不同类型 csv 的最大行数。
  • 是的,你必须使用流,查看这个已接受的答案:stackoverflow.com/questions/20722891/…

标签: javascript node.js mongodb


【解决方案1】:

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

正如我所见,.csvRows 元素是一个数组,因此与其一次发送 所有 元素,不如将其切分并批处理插入调用中的元素。似乎元素的数量而不是大小是问题的原因。将数组拆分为几个插入而不是 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 中进行操作。

【讨论】:

  • 有可能;但我试图找到一个可以在单个插入中插入最大行数的大小。问题是 csv 中的属性编号也有所不同,因此随着属性编号的增加,每个大小的行数可能会减少。
  • @SreekeshOkky 不确定你得到我了。答案中有一点代码块来清除它。
  • 更好的做法是为此使用流:gist.github.com/PaulMougel/8111810
  • @SreekeshOkky 或者按照 MDG 刚刚评论的那样去做。答案的重点是将解析后的输入分解成更小的块。
  • @MDG Yours 可能是更好的实际代码方法。只是想指出需要分解已解析的文档。
【解决方案2】:

您可以将这些数据做成一个元素数组,然后简单地使用 MongoDB 插入函数,将这个数组传递给插入函数

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 2011-11-15
    • 2021-12-29
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多