使用NodeJS从CSV填充MongoDB

Mon*_*757 3 csv mongodb node.js

我正在尝试使用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");
}
Run Code Online (Sandbox Code Playgroud)

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

[Error: Connection was destroyed by application]
Run Code Online (Sandbox Code Playgroud)

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

ana*_*six 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块.