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

pet*_*tey 4 csv mongodb node.js

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

我必须使用的数据是在Excel文件中.我能够获取该Excel文件并从中创建CSV文件以导入MongoDB.我的问题是,我有多个机会与个人代表联系在一起.我试图找出如何为我的应用程序设置数据库,以便我可以导入此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

基本上我想要能够导入csv文件,在这种格式中,在node.js中有一个模型,它将支持这个导入,然后能够为应用程序中的每个rep提取数据.例如,所有代表的概述将显示如下:Rep 1将显示3个Opps,Rep 2将显示2个Opps

这甚至可能吗?我是以错误的方式来做这件事的吗?有没有更好的方法呢?任何有助于指导我的提示,技巧,建议或示例都会很棒.

mjh*_*jhm 8

由于您似乎熟悉ORM模式,我建议使用"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);
Run Code Online (Sandbox Code Playgroud)

您在"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
Run Code Online (Sandbox Code Playgroud)