将多个csv文件导入到mongodb

3
我知道如何使用mongoimport在shell/cmd提示符下或使用GUI(例如3T Studio)将CSV文件导入为集合。每一行都是一个带有标题行的文档。
例如,一个名为Data.csv的csv文件,标题行和内容如下: Example 如果只是一个文件,可以很容易地使用上述方法完成。
请问有没有办法导入多个文件(几百个),其中可以: - 将每个文件分开作为一个集合 - 使用文件名作为集合名称 - 将所有内容作为每个文档导入到集合中
最好可以使用nodejs,但其他方法也可以。
谢谢。
更新
for i in `ls ~/te/*.csv`;  do 
   ./mongoimport -d test $i --type=csv --headerline  ; 
done

const exec = require('child_process').exec;
var yourscript = exec('bash mongoin.sh /te',
    (error, stdout, stderr) => {
        console.log(`${stdout}`);
        console.log(`${stderr}`);
        if (error !== null) {
            console.log(`exec error: ${error}`);
        }
    });
2个回答

3

在bash中:

for i in `ls ~/Desktop/*.csv`;  do 
   ./mongoimport -d local $i --type=csv --headerline  ; 
done

在批处理中:

forfiles /p c:\te /m *.csv /c "cmd /c mongoimport -d local @file --type csv --headerline"

Where

 ~/Desktop/*.csv is the folder where the csv files are located.

“local”是要导入到的MongoDB数据库。

每个CSV文件的基本文件名将被用作集合名称。

将bash代码内容放入脚本中,比如说mymongo.sh

for i in `ls $1`;  do 
   ./mongoimport -d local $i --type=csv --headerline  ; 
done

然后在Node中调用它,使用以下代码:

const exec = require('child_process').exec;
var yourscript = exec('bash mymongo.sh /Users/niko/Desktop',
        (error, stdout, stderr) => {
            console.log(`${stdout}`);
            console.log(`${stderr}`);
            if (error !== null) {
                console.log(`exec error: ${error}`);
}});

或者在Windows上,使用mymongo.bat中的代码

const exec = require('child_process').exec;
var yourscript = exec('cmd /c c:/te/mymongo.bat',
        (error, stdout, stderr) => {
            console.log(`${stdout}`);
            console.log(`${stderr}`);
            if (error !== null) {
                console.log(`exec error: ${error}`);
}});

谢谢。由于我还是新手,请问我把这个放在哪里?是放在app.js文件中吗?我需要包含什么吗?如果您能提供更详细的程序,我将不胜感激。对于造成的麻烦,我深表歉意。谢谢。 - SILearner
嗨,我把Bash直接放到C盘下的“te”文件夹中,并将CSV文件也放在其中。编辑过的代码就是我所做的。然而,什么都没有发生。有什么问题吗? - SILearner
嗨,很抱歉打扰你。您介意给我进一步的建议吗?谢谢。 - SILearner
添加了未经测试的Windows安装设置。 - Nicolas Modrzyk

1
这是它的Python版本。
import os
import subprocess

# directory of files
dir_files = 'C:\data'
# create list of all files
_, _, fns = next(os.walk(dir_files))
files = [os.path.join(dir_files, fn) for fn in fns]
# mongotool address
mongotool = r'C:\Program Files\MongoDB\Server\4.4\bin\mongoimport.exe'
# name of mongodb database
mydatabase = 'mydatabase'
# name of mongodb collection
mycollection = 'mycollection'
# import all files to mongodb
for fl in files:
    commands =[mongotool, '--db', mydatabase,
               '--collection', mycollection,
               '--file', fl,
               '--type', 'tsv',
               '--headerline']
    subprocess.Popen(commands, shell=True)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接