2013-11-22 51 views
3

我正在編寫需要加載CSV文件的腳本,對其進行一些處理,然後將其保存到MongoDB中。加載CSV文件的最佳方式是什麼?MongoDB腳本和CSV文件:我可以使用require.js加載jquery.csv嗎?

現在我的存根代碼如下所示:

var fs = require("fs"); 
var $ = jQuery = require("jquery"); 
require("./jquery.csv.js"); 

var sample = "../data/ucl-ramsay-20131014.csv"; 
fs.readFile(sample, "UTF-8", function(err, csv) { 
    $.csv.toArrays(csv, {}, function(err, data) { 
    for(var i=0, len=data.length; i<len; i++) { 
     print(data[i]); 
    } 
    }); 
}); 

但是這個失敗,因爲它似乎MongoDB的默認情況下不配備require。我應該以其他方式加載CSV文件,還是應該先加載require.js?

+2

我無法弄清楚你正在嘗試在這裏做。你是否試圖在mongodb shell中使用node.js模塊?您指定的代碼是從jquery-csv網站的node-usage.js文件中直接複製的。那麼這與mongodb有什麼關係? – Brandon

回答

5

你不能在MongoDB控制檯中輕鬆完成所有的腳本,我不建議你試試。相反,我建議你爲你的平臺安裝一個NodeJS副本,然後使用你喜歡的任何csv解析器,你可以很容易地遍歷行並將文檔插入到MongoDB數據庫中。

在這樣的文件csv_import.js添加代碼(添加代碼來解析CSV文件):

var MongoClient = require('mongodb').MongoClient; 
    var async = require('async'); 

    var csv = []; // build the csv into an array... 
    // putting the data into the 'test' database: 
    MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { 
    if(err) throw err; 

    var collection = db.collection('csv_import'); 
    async.every(csv, function(row, callback) { 
     // build the csv row into an object literal 
     var data = { "name" : .... }; // make this fit your data correctly 
     collection.insert(data, function(err, docs) { 
      // signal that this row is done inserting 
      // by calling the callback passed with every row 
      callback(err); 
     }); 
    }, function() { 
     // all rows have been inserted, so close the db connection 
     db.close(); 
    }); 
    }) 

然後,就

node csv_import.js 
+0

這個建議很有幫助。最終它是一個簡單的腳本,我最終使用'MongoClient'和'node-csv'來編寫它。我只是使用'jQuery'承諾 - 而不是'async'我只是使用'jQuery'承諾 - 如果我可以強制MongoClient和node-csv方法調用是同步的,那麼我的代碼會更漂亮並且更簡單,但它可以工作。 – cfogelberg

相關問題