Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将100000行的CSV保存到MongoDB并在保存所有行后发出事件_Javascript_Node.js_Mongodb_Csv_Heroku - Fatal编程技术网

Javascript 无法将100000行的CSV保存到MongoDB并在保存所有行后发出事件

Javascript 无法将100000行的CSV保存到MongoDB并在保存所有行后发出事件,javascript,node.js,mongodb,csv,heroku,Javascript,Node.js,Mongodb,Csv,Heroku,我有一个超过100000行的CSV文档,每行包括每小时的价格数据,需要保存为自己的数据库记录。我希望此操作在保存每一行后通过EventEmitter发出一个事件,但相反,在保存所有行后,整个操作只会重复本身,并且我的终端再次显示“当前”。有人能帮我修一下吗 注意:我正在使用此软件包处理CSV 奖励:我想在Heroku上部署此操作,但尝试此操作偶尔会导致内存错误,因此如果您对如何避免这些错误有任何建议,将不胜感激:) 读取CSV文件,提交到另一个函数进行处理,然后等待回调… // SEED - H

我有一个超过100000行的CSV文档,每行包括每小时的价格数据,需要保存为自己的数据库记录。我希望此操作在保存每一行后通过EventEmitter发出一个事件,但相反,在保存所有行后,整个操作只会重复本身,并且我的终端再次显示“当前”。有人能帮我修一下吗

注意:我正在使用此软件包处理CSV

奖励:我想在Heroku上部署此操作,但尝试此操作偶尔会导致内存错误,因此如果您对如何避免这些错误有任何建议,将不胜感激:)

读取CSV文件,提交到另一个函数进行处理,然后等待回调…

// SEED - HourlyPrices
exports.seed_hourly_prices = function(req, res) {
        console.log("Seeding Hourly Prices 2000-Current");

        // Seed Historical Data 2000 - 2014
        fs.readFile(__dirname + '/../../csv/hourlyprices_2000_2014.csv', 'utf8', function (err, data) {
            if (err) { return console.log(err) };
            save_each_row(data, function(){ 
                console.log("Callback Heard");
                eventEmitter.emit('HistoricalDataSeeded');
            });
        });

}; // seed_hourly_price
处理并保存每一行

save_each_row = function(data, callback) {
CSV.forEach(data,',', function(row, index) {
    if(row[0] && row[1] && row[0].indexOf('*') === -1 && row[1].indexOf('-') === -1) { // 1 hour out of the year contains an asterisk, I don't know why, but it marks a duplicate.  Don't add this.
        var splitDate = row[0].split(/[ ]+/); 
        var hour                        = splitDate[1];
        var day                         = splitDate[0];
        var full_date                   = row[0];
        var price                       = parseFloat(row[1]).toFixed(2);
        var thirty_day_rolling_average  = parseFloat(row[2]).toFixed(2);
        var system_demand               = parseFloat(row[3]).toFixed(2);

        if (hour === "24") {
            date = new Date(day+" 00:00:00");
            date.setDate(date.getDate() + 1);
            date = moment.tz(date, 'America/Phoenix').format("YYYY-MM-DDTHH:mm:ss");
            // Change day, hour, full_date results
            var hour      = '00';
            var day       = moment.utc(date).format('MM/DD/YYYY');
            var full_date = day + " " + hour;
        } else {
            date = new Date(full_date + ":00:00");
            date = moment.tz(date, 'America/Phoenix').format("YYYY-MM-DDTHH:mm:ss");
        };
        // Save Data
        var hourlyprice = new HourlyPrice({
            date:                                     date, 
            day:                                      day,
            hour:                                     hour,
            full_date:                                full_date,
            price:                                    price,
            thirty_day_rolling_average:               thirty_day_rolling_average,
            system_demand:                            system_demand
        });

        hourlyprice.save(function(err, pp){
                if (err) {
                    console.log("ERROR==========================", err);
                    console.log(hourlyprice)
                };
        });
    } else {
        console.log("Ommitted Row:" + index, row);
    };
}); //CSV()
}; // save_each_row

调用
fs.readFile
将把整个文件读入一个变量。您需要将其拆分为一个数组,然后对其进行迭代,或者使用readline、byline或逐行创建流