如何使用nodejs将csv数据插入mongodb

0 csv mongodb node.js angularjs

您正在使用nodeJS,express和mongoDB开发应用程序,我需要从csv文件中获取用户数据并将其上传到我的数据库,此db具有使用mongoose设计的模式.

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

有没有一些模块可以做到这一点?或者我需要从头开始构建它?我对nodeJS很新,我需要一些建议

谢谢

这个应用程序有一个角度前端所以用户可以上传文件,也许我应该读取前端的csv并将其转换为节点的数组,然后插入?

Jak*_*ers 5

使用像这样的几个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)