使用NodeJS从CSV填充MongoDB

时间:2013-11-13 21:03:01

标签: node.js mongodb csv

我正在尝试使用CSV文件中的数据填充MongoDB。我的MongoDB中当前没有数据库或集合,我想使用更新函数创建它们,该函数创建从csv文件解析的对象。

我正在使用ya-csv来解析我的csv文件和节点的mongodb驱动程序。

我的代码如下所示:

var csv = require('ya-csv');
var fs = require('fs');
var MongoClient = require('mongodb').MongoClient;
var Server = require('mongodb').Server;
var mongoclient = new MongoClient(new Server('localhost', 27017, {'native_parser' : true}));

var reader = csv.createCsvFileReader('YT5.csv', {columnsFromHeader:true,'separator':   ','});
reader.addListener('data', function(data){
var nameHolder = data.name;
//I have no issue getting the needed variables from my csv file
mongoclient.db(nameHolder).collection('assets').update({assetId:data.assetId,name:data.name},{upsert:true},function(err,updated){if(err){console.log(err)}});

reader.addListener('end', function(data){
console.log("done");
}

我没有为此创建数据库或集合,但是可以通过此更新为我执行此操作吗?我收到一个错误:

[Error: Connection was destroyed by application]

当我运行它时,数据库会被创建,但它们是空的。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

除非特别需要使用NodeJS,否则不仅要重新排序,而且要对从CSV文件中读取的字段进行一些复杂的修改,请使用 mongoimport

如果您只需要跳过并重新排序某些字段 - 使用简单的awk工作字段,根据需要跳过并更改顺序:

cat /tmp/csv | awk -F',' 'BEGIN{OFS=","} {print $1,$2,$4,$3,$10}' | mongoimport --type csv --db test --collection csv_import

此外,如果需要根据csv值更改集合或数据库名称(此示例中的字段10用作数据库名称,字段11用作集合):

cat /tmp/csv | awk -F',' 'BEGIN{OFS=","} {print $1,$2,$4,$3,$10 | "mongoimport --type csv --db "$10" --collection "$11 }'

或者您可以先将文件拆分为每个db / collection块。

答案 1 :(得分:0)

如果转换javascript数组中的csv行(每行是一个对象),则可以使用https://github.com/bitliner/MongoDbPopulator