3

我正在尝试使用 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]

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

4

2 回答 2

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 块。

于 2013-11-15T16:46:15.133 回答
0

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

于 2013-11-14T02:27:26.730 回答