如何修复将数据导入mongodb时出现的JavaScript堆内存不足错误?

如何修复将数据导入mongodb时出现的JavaScript堆内存不足错误?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,谁能告诉我为什么我不能将数据导入mongodb?当我尝试只导入我得到的全部文件的前100行时 数据库操作git:(主)✗ 节点导入\u acparts\u到\u mongdb.js (节点:10216)警告:检测到可能的EventEmitter内存泄漏。11 亲密的听众补充道。使用emitter.setMaxListeners()增加 极限➜ 数据库操作git:(主)✗ 我尝试从同一个文件中导入600.000行,该csv文件具有以下结构: 设施;项目编号;部分名称;第二部分:说明;净重;海关统

谁能告诉我为什么我不能将数据导入mongodb?当我尝试只导入我得到的全部文件的前100行时

数据库操作git:(主)✗ 节点导入\u acparts\u到\u mongdb.js (节点:10216)警告:检测到可能的EventEmitter内存泄漏。11 亲密的听众补充道。使用emitter.setMaxListeners()增加 极限➜ 数据库操作git:(主)✗

我尝试从同一个文件中导入600.000行,该csv文件具有以下结构:

设施;项目编号;部分名称;第二部分:说明;净重;海关统计 PBL;5535210444;掩护;掩护;0;84314980 D37;5535211545;支架支架—消防给水罐A101-20;2,939;72169110 PBL;5535211234;支架支架—消防给水罐A101-20;2,939;84314300 PBL;5535212478;环扣;环扣;0,045;84314980 .......

➜ 数据库操作git:(主)✗ 节点导入\u acparts\u到\u mongdb.js

38787毫秒:标记扫描1384.9(1436.8)->1384.8(1436.8)MB,1181.9 /0.0毫秒[分配失败][请求旧空间中的GC]。39964 ms:标记扫描1384.8(1436.8)->1384.8(1436.8)MB,1177.7/0.0 ms [分配失败][请求旧空间中的GC]。41199毫秒: 标记扫描1384.8(1436.8)->1385.8(1420.8)MB,1234.0/0.0毫秒 [最后手段gc]。42429毫秒:标记扫描1385.8(1420.8)->1386.9 (1420.8)MB,1229.8/0.0毫秒[最后的gc]

==JS堆栈跟踪=========================================

安全上下文:0x4962c9cfb39 1:$\u验证[/Users/isakalfleur/Dropbox/Isak/Coding/Other/autoMDM/node\u modules/mongoose/lib/document.js:~1404] [pc=0xe52ebc4f d97](此=0x3867C1F221,回调=0x3867C201E1) 2:验证[/Users/isakalfleur/Dropbox/Isak/Coding/Other/autoMDM/node_modules/mongoose/lib/document.js:~1324] [pc=0x

致命错误:调用和重试上次分配失败-JavaScript堆 内存不足1:node::Abort()[/usr/local/bin/node]2: 节点::FatalException(v8::隔离*,v8::本地, v8::Local)[/usr/Local/bin/node]3: v8::internal::v8::FatalProcessOutOfMemory(char const*,bool) [/usr/local/bin/node]4:v8::内部::工厂::新填充对象(int, bool,v8::internal::AllocationSpace)[/usr/local/bin/node]5: v8::internal::Runtime_AllocateInTargetSpace(int, v8::internal::Object**,v8::internal::Isolate*)[/usr/local/bin/node] 6:0xe52eb8079a7[1]10085中止节点 将_acparts_导入_mongdb.js➜ 数据库操作git:(主)✗


const mongoose=require('mongoose'),
parse=require('csv-parse'),
path=require('path'),
fs=需要('fs'),
ACpart=需要('./型号/ACpart');
mongoose.Promise=require('bluebird');
猫鼬mongodb://localhost/automdm_test');
const db=mongoose.connection;
db.on('error',console.error.bind(console,'connectionerror:');
db.once('open',function(){
//我们接通了!
const p=path.join(uu dirname,“/../”,“文件操作”,“csv文件”);
//控制台日志(p);
const parser=parse({delimiter:';'},函数(err,数据){
//控制台日志(数据);
const facility=data.map((项,i)=>data[i][0]);
const item_number=data.map((item,i)=>data[i][1]);
const part_name=data.map((项,i)=>data[i][2]);
const part_description=data.map((项,i)=>data[i][3]);
常数净重=数据图((项目,i)=>数据[i][4]);
const customs_statistic=data.map((项目,i)=>data[i][5]);
//循环并将数据存储到mongodb中
for(设i=1;i
如果内存大于堆,则无法将所有内容都放入内存中。请使用流式CSV解析器,例如:


然后将其分批发送到数据库,而不是一次全部发送。

谢谢您的回答。正如您所看到的,我正在使用csv解析器。您能告诉我如何将其拆分并分批发送吗?:)
const mongoose  = require('mongoose'),
    parse       = require('csv-parse'),
    path        = require('path'),
    fs          = require('fs'),
    ACpart      = require('./models/acparts');

mongoose.Promise = require('bluebird');

mongoose.connect('mongodb://localhost/automdm_test');

const db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function() {
    // we're connected!

    const p = path.join(__dirname, '/../', 'file-operations', 'csv-files');
    //console.log(p);

    const parser = parse({delimiter: ';'}, function(err, data){
        //console.log(data);
        const facility = data.map((item,i) => data[i][0]);
        const item_number = data.map((item,i) => data[i][1]);
        const part_name = data.map((item,i) => data[i][2]);
        const part_description = data.map((item,i) => data[i][3]);
        const net_weight = data.map((item,i) => data[i][4]);
        const customs_statistical = data.map((item,i) => data[i][5]);

        // Looping and storing the data into mongodb
        for (let i = 1; i < data.length; i++) {

            const newACpart = new ACpart();
            newACpart.facility = facility[i]
            newACpart.item_number = item_number[i];
            newACpart.part_name = part_name[i];
            newACpart.part_description = part_description[i];
            newACpart.net_weight = net_weight[i];
            newACpart.customs_statistical = customs_statistical[i];
            newACpart.save()
            .then(function() {
                mongoose.disconnect();
            })
            .catch(function(err) {
                console.log('There was an error', err);
            });
        }
    });
    fs.createReadStream(p + '/mrsparts.csv').pipe(parser);
});