从Node.js App的CSV文件导入多个条目到MongoDB

首先,我是Node.js和MongoDB的新手。 我有一个networking应用程序的想法,工作,我目前正在工作。 它涉及将数据分配给数据库中的代表,然后在应用程序内访问数据。

我必须使用的数据在Excel文件中。 我可以把这个Excel文件,并创build一个CSV文件导入到MongoDB。 我的问题是,我有多个机会绑定到个人代表。 我想弄清楚如何设置我的应用程序的数据库的方式,我可以导入此CSV文件的位置,它将保存所有的数据库中的特定代表的代表数据库。

这是一个数据的例子:
代表名称,Opp ID,Opp名称,先前金额,金额
Rep 1,1234561,Opp 1,10000,8000
Rep 1,1234562,Opp 2,15000,9000
Rep 2,1234563,Opp 3,20000,10000
Rep 1,1234564,Opp 4,25000,11000
Rep 2,1234565,Opp 5,30000,12000

基本上我想能够导入CSV格式的文件,在这种格式,有一个模型在node.js将支持这个导入,然后能够拉应用程序内的每个代表的数据。 例如,所有代表的总览将显示如下:代表1将有3个Opps出现,代表2将有2个Opps出现

这甚至有可能吗? 我是否以错误的方式去做这件事? 有没有更好的方法来做到这一点? 任何提示,技巧,build议或例子,以帮助指导我会很好。

由于您似乎熟悉ORM模式,我build议使用“mongoose”模块 。 虽然我猜想你将有一个巨大的学习曲线与NodeJS和Mongo做一个坚实的应用程序。

下面是一个工作的例子,让你开始:

#! /usr/bin/node var mongoose = require('mongoose'); mongoose.connect('localhost', 'test'); var fs = require('fs'); var lineList = fs.readFileSync('mytest.csv').toString().split('\n'); lineList.shift(); // Shift the headings off the list of records. var schemaKeyList = ['RepName', 'OppID', 'OppName', 'PriorAmount', 'Amount']; var RepOppSchema = new mongoose.Schema({ RepName: String, OppID: String, OppName: String, PriorAmount: Number, Amount: Number }); var RepOppDoc = mongoose.model('RepOpp', RepOppSchema); function queryAllEntries () { RepOppDoc.aggregate( {$group: {_id: '$RepName', oppArray: {$push: { OppID: '$OppID', OppName: '$OppName', PriorAmount: '$PriorAmount', Amount: '$Amount' }} }}, function(err, qDocList) { console.log(util.inspect(qDocList, false, 10)); process.exit(0); }); } // Recursively go through list adding documents. // (This will overload the stack when lots of entries // are inserted. In practice I make heavy use the NodeJS // "async" module to avoid such situations.) function createDocRecurse (err) { if (err) { console.log(err); process.exit(1); } if (lineList.length) { var line = lineList.shift(); var doc = new RepOppDoc(); line.split(',').forEach(function (entry, i) { doc[schemaKeyList[i]] = entry; }); doc.save(createDocRecurse); } else { // After the last entry query to show the result. queryAllEntries(); } } createDocRecurse(null); 

您在“mytest.csv”中的数据:

 Rep Name,Opp ID,Opp Name,Prior Amount,Amount Rep 1,1234561,Opp 1,10000,8000 Rep 1,1234562,Opp 2,15000,9000 Rep 2,1234563,Opp 3,20000,10000 Rep 1,1234564,Opp 4,25000,11000 Rep 2,1234565,Opp 5,30000,12000