0 csv mongodb node.js angularjs
您正在使用nodeJS,express和mongoDB开发应用程序,我需要从csv文件中获取用户数据并将其上传到我的数据库,此db具有使用mongoose设计的模式.
但我不知道如何做到这一点,读取csv文件的最佳方法是检查对数据库的重复项,如果用户(csv中的一列)不在这里插入它?
有没有一些模块可以做到这一点?或者我需要从头开始构建它?我对nodeJS很新,我需要一些建议
谢谢
这个应用程序有一个角度前端所以用户可以上传文件,也许我应该读取前端的csv并将其转换为节点的数组,然后插入?
使用像这样的几个node.js csv库之一,然后你可以在用户名上运行upsert.
upsert是一个更新查询,upsert标志设置为true : {upsert: true}. 仅当搜索结果为零时,才会插入新记录.所以你查询可能看起来像这样:
db.collection.update({username: userName}, newDocumentObj, {upsert: true})
Run Code Online (Sandbox Code Playgroud)
userName您正在使用的当前用户名在哪里,是newDocumentObj可能需要插入的json文档.
但是,如果查询确实返回结果,则会对这些记录执行更新.
编辑:我已经决定upsert不适合这个,但我将留下描述.
你可能需要在这里做两个查询,一个查找和一个条件插入.对于此查找查询,我将使用该toArray()函数(而不是流),因为您期望0或1结果.检查您是否在用户名上得到了结果,如果没有插入数据.
在这里阅读节点的mongodb库.
编辑以回应您的评论:看起来您正在从本地csv文件中读取数据,因此您应该能够构建您的程序,如:
function connect(callback) {
connStr = 'mongodb://' + host + ':' + port + '/' + schema; //command line args, may or may not be needed, hard code if not I guess
MongoClient.connect(connStr, function(err, db) {
if(err) {
callback(err, null);
} else {
colObj = db.collection(collection); //command line arg, hard code if not needed
callback(null, colObj);
}
});
}
connect(function(err, colObj) {
if(err) {
console.log('Error:', err.stack);
process.exit(0);
} else {
console.log('Connected');
doWork(colObj, function(err) {
if(err) {
console.log(err.stack);
process.exit(0);
}
});
}
});
function doWork(colObj, callback) {
csv().from('/path/to/file.csv').on('data', function(data) {
//mongo query(colObj.find) for data.username or however the data is structured
//inside callback for colObj.find, check for results, if no results insert data with colObj.insert, callback for doWork inside callback for insert or else of find query check
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6476 次 |
| 最近记录: |