我是mongo和node的新手。我试图将csv上传到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();
});
此代码适用于csv,大小为4mb;不仅仅是它不起作用。
我试图控制错误
console.log(JSON.stringify(err));
它返回{}
注意:我的是32位系统。
是否因为32位系统的文件限制为4mb?
我遇到的情况是我无法限制csv文件中的大小和no.of属性(即,代码将处理各种csv文件)。那怎么处理呢?我有可用的模块吗?
答案 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插入函数,将此数组传递给插入函数