Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将多个csv导入mongodb_Node.js_Mongodb_Csv - Fatal编程技术网

Node.js 将多个csv导入mongodb

Node.js 将多个csv导入mongodb,node.js,mongodb,csv,Node.js,Mongodb,Csv,我知道如何使用shell/cmd提示符中的mongoimport或3T studio之类的GUI将CSV文件作为集合导入。 每一行都是以标题行为标题的文档 例如,csv文件名Data.csv 标题和内容如下: 如果只针对一个文件,则使用上述方法可以非常轻松地完成 我想知道有没有一种方法可以导入多个文件(几百个)。 -将每个文件分隔为一个集合 -使用文件名作为集合名 -将所有内容作为集合下的每个文档导入 最好的方法是可以使用nodejs,但其他方法更受欢迎 多谢各位 更新 for i in `l

我知道如何使用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

在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.
local是要导入到的mongodb数据库

集合的名称将由每个csv文件的基本文件名选取

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

然后从节点调用它,代码如下:

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中的代码


这是它的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)


非常感谢。因为我对这个还很陌生。我把这个放哪儿了?进入app.js?我需要包括什么吗?更详细的计划将不胜感激。我为麻烦道歉。谢谢。嗨,我把bash直接放在C驱动器下的文件夹“te”中,并把CSV文件也放进去了。编辑的代码就是我所做的。但是,什么都没有发生。有什么问题吗?嗨,很抱歉打扰你。你介意给我进一步的建议吗?谢谢。添加了未经测试的windows安装程序。
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}`);
}});
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}`);
}});
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)