node.js - 从 Node.js 应用程序的 CSV 文件将多个条目导入 MongoDB

标签 node.js mongodb csv

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

我必须使用的数据在 Excel 文件中。我能够获取该 Excel 文件并从中创建一个 CSV 文件以导入到 MongoDB 中。我的问题是,我有多个与个人代表相关的机会。我正在尝试弄清楚如何为我的应用程序设置数据库,以便我可以导入此 CSV 文件并将代表的所有数据保存到数据库中的该特定代表。

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

基本上我希望能够以这种格式导入 csv 文件,在 node.js 中有一个模型将支持此导入,然后能够为应用程序中的每个代表提取数据。例如,所有代表的概览会显示如下内容: Rep 1 将出现 3 个 Opps,Rep 2 将出现 2 个 Opps

这可能吗?我会以错误的方式解决这个问题吗?有更好的方法吗? 任何有助于指导我的提示、技巧、建议或示例都会很棒。

最佳答案

由于您似乎熟悉 ORM 模式,我建议您使用 "mongoose" module 。尽管我猜想您将需要大量学习 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

关于node.js - 从 Node.js 应用程序的 CSV 文件将多个条目导入 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203108/

相关文章:

csv - Pig 如何使用过滤器格式化半结构化 CSV

node.js - 使用 NodeJS 后端从 SPA 交付客户创作的内容

node.js - 操作数据对象sequelize ORM (nodejs)

node.js http 'get' 请求带有查询字符串参数

google-app-engine - 我们可以在谷歌应用引擎基础设施中使用 cassandra/couchdb/mongodb 吗?

node.js - NodeJS : How to convert 'aggregation' (cursor) object to CSV and return a CSV response from a request using Express?

linux - 比较两个 csv 文件并根据使用 awk 的比较更新字段

Javascript 将新字段分配给对象

node.js - MongoDB 错误 : Cannot use retryable writes with limit=0

mongodb - mongo find() 使用 eval 不产生输出