我正在尝试使用 CSV 文件中的数据填充我的 MongoDB。我的 MongoDB 中目前没有数据库或集合,我想使用更新函数创建这些数据库或集合,该函数创建从 csv 文件解析的对象。
我正在使用 ya-csv 来解析我的 csv 文件和 Node 的 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]
当我运行它时,数据库已创建,但它们是空的。 任何帮助将不胜感激。
最佳答案
除非有使用 NodeJS 的特定需求,比如不仅要重新排序而且要对从 CSV 文件读取的字段进行一些复杂的修改,请使用 mongoimport。
如果您需要做的只是跳过和重新排序某些字段 - 使用简单的 awk 处理这些字段,根据需要跳过和更改顺序:
猫/tmp/csv | awk -F',' 'BEGIN{OFS=","} {print $1,$2,$4,$3,$10}' | mongoimport --type csv --db 测试 --collection csv_import
此外,如果需要根据 csv 值更改集合或数据库名称(本例中的字段 10 作为数据库名称,字段 11 作为集合):
猫/tmp/csv | awk -F',' 'BEGIN{OFS=","} {打印 $1,$2,$4,$3,$10 | "mongoimport --type csv --db "$10"--collection "$11 }'
或者您可以先将文件拆分为每个数据库/集合 block 。
关于node.js - 使用 NodeJS 从 CSV 填充 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964261/