4

まず、Node.js と MongoDB は初めてです。現在取り組んでいる、仕事用の Web アプリのアイデアがあります。これには、データベース内の担当者にデータを割り当て、アプリ内でそのデータにアクセスすることが含まれます。

使用するデータは Excel ファイルです。その Excel ファイルを取得して、そこから CSV ファイルを作成し、MongoDB にインポートすることができます。私の問題は、個々の担当者に関連付けられた複数の商談があることです。このCSVファイルをインポートできる方法でアプリのデータベースをセットアップする方法を見つけようとしています。これにより、担当者のすべてのデータがデータベース内の特定の担当者に保存されます。

データの例:
担当者名、案件 ID、案件名、以前の金額、金額
担当者 1,1234561、案件 1,10000,8000
担当者 1,1234562、案件 2,15000,9000担当者 2,1234563、案件
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 が表示されます。

これは可能ですか?私はこれについて間違った方法で進んでいますか?これを行うより良い方法はありますか?私を導くのに役立つヒント、トリック、提案、または例は素晴らしいでしょう。

4

1 に答える 1

7

あなたは 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);

「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
于 2013-01-07T21:43:42.513 に答える