gpt4 book ai didi

node.js - 如何使用nodejs将csv数据插入mongodb

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:18 24 4
gpt4 key购买 nike

您好,我正在使用 nodeJS、express 和 mongoDB 开发一个应用程序,我需要从 csv 文件中获取用户数据并将其上传到我的数据库,该数据库具有使用 mongoose 设计的架构。

但我不知道该怎么做,读取 csv 文件的最佳方法是什么,检查数据库中的重复项,以及如果用户(csv 中的一列)不在这里插入它?

有一些模块可以做到这一点吗?或者我需要从头开始构建它?我对 NodeJS 还很陌生我需要一些建议

谢谢

这个应用程序有一个有 Angular 的前端,因此用户可以上传文件,也许我应该在前端读取 csv 并将其转换为 Node 数组,然后插入它?

最佳答案

使用多个 node.js csv 库之一,例如 this one ,然后您可能可以运行 upsert关于用户名。

upsert 是 upsert 标志设置为 true 的更新查询:{upsert: true}。仅当搜索返回零结果时,才会插入新记录。所以你的查询可能看起来像这样:

 db.collection.update({username: userName}, newDocumentObj, {upsert: true})

其中 userName 是您当前使用的用户名,newDocumentObj 是可能需要插入的 json 文档。

但是,如果查询确实返回结果,则会对这些记录执行更新。

编辑:我认为更新插入不适合于此,但我将保留说明。

您可能需要在这里执行两个查询,一个查找和一个条件插入。对于此查找查询,我将使用 toArray() 函数(而不是流),因为您期望 0 或 1 个结果。检查您是否获得了用户名的结果,如果没有则插入数据。

了解 Node 的 mongodb 库 here .

编辑回应您的评论:看起来您正在从本地 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
});
}

关于node.js - 如何使用nodejs将csv数据插入mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com