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