我知道如何在shell / cmd提示符中使用mongoimport或使用3T studio等GUI导入CSV文件作为集合。 每一行都是一个标题为标题的文件。
例如csv文件名Data.csv 标题和内容如下:
如果仅使用一个文件,可以使用上述方法轻松完成。
我可以知道有没有办法可以导入多个文件(几百个)。 - 将每个文件分隔为一个集合 - 使用文件名作为集合名称 - 将所有内容导入集合下的每个文档
最好是可以使用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}`);
}
});
答案 0 :(得分:1)
在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"
哪里
~/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}`);
}});
答案 1 :(得分: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)