我知道如何在shell/cmd提示符中使用mongoimport或使用GUI (如3Tstudio)将CSV文件导入为集合。每一行都是以标题为标题的文档。
例如,csv文件名、Data.csv标题和内容如下:
如果只使用一个文件,可以很容易地使用上面的方法来完成。
我想知道是否有一种方法可以导入多个文件(几百个)。-Separate每个文件作为一个集合,-Use文件名作为集合名-Import所有内容作为集合下的每个文档
最好是可以使用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}`);
}
});
发布于 2017-10-04 19:02:42
在巴什:
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"
哪里
~/Desktop/*.csv is the folder where the csv files are located.
本地是要导入到的mongodb数据库。
集合的名称将由每个csv文件的基本文件名获取。
将bash代码的内容放入脚本中,比如mymongo.sh
for i in `ls $1`; do
./mongoimport -d local $i --type=csv --headerline ;
done
然后使用以下代码从节点调用它:
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}`);
}});
发布于 2021-04-11 19:03:47
这是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)
https://stackoverflow.com/questions/46576668
复制