javascript - MongoDb批量插入限制问题

标签 javascript node.js mongodb

我对 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 文件)。那么如何处理呢?我有可用的模块吗?

最佳答案

如果您在将 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
    }
}

像这样以 block 的形式进行操作。

关于javascript - MongoDb批量插入限制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21906800/

相关文章:

node.js Winston - 如何安全地耗尽记录器

javascript - Node.js puppeteer 师 "document is not defined"

node.js - 在mongo聚合中匹配两个字符串对象字段

mongodb - 启动项目+Docker compose时遇到错误

javascript - Bootstrap 按钮仅适用于 jfiddle,不适用于网页

javascript - 如何添加导航下拉菜单?

javascript - routerLink 在 angular2 中使用 Protractor 的 e2e 测试中不起作用

node.js - 锁定全局 npm 包

javascript - 通过 Ajax 发送数组失败

java - spring-mongo-1.0.xsd 错误