2012-07-23 25 views
15

我是mongodb的新手,并且想要知道如何将一个json文件从一台服务器导入到另一台服务器。我尝试了下面的命令mongoimport -d test -c bik check.json,它对我来说工作正常。现在我想知道什么时候有多个json文件,我如何一次性导入所有这些文件。我找不到任何相关的文件,在这里写这是不可能的。请帮助我这是可能的和如何使用mongoimport导入超过1个json文件

回答

17

你总是可以写一些shell脚本。

colls=(mycoll1 mycoll2 mycoll5) 

for c in ${colls[@]} 
do 
    mongoimport -d mydb -c $c.json 
done 
+0

谢谢工作魔术 – user850234 2012-07-23 09:37:39

+2

只是一个查询。是不是可以定义一个目录名称,只需指定目录的路径来从中导入所有'json'文件,而不是专门指定文件名。这是因为如果有多个文件,那么我们必须指定所有的文件名,然后执行'for'循环,这与为每个文件手动执行'mongoimport'命令相同。它可以更动态地完成吗? – user850234 2012-07-23 09:58:41

+0

我试过了,但没有奏效。不过,它可以和'mongorestore'一起使用。 – 2012-07-23 10:05:14

17

我想出了一个更优雅的方式来自动导入所有集合:

ls -1 *.json | sed 's/.json$//' | while read col; do 
    mongoimport -d db_name -c $col < $col.json; 
done 

我希望这是有帮助的。

+0

就像一个魅力!我其实需要导入tsv文件,所以我不得不包含'--headerline'和'--type tsv'非常简单。谢谢 – agarcian 2014-12-10 18:13:17

13

Windows批处理版本:

@echo off 
for %%f in (*.json) do (
    "mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json 
) 
+0

谢谢托米。我不得不忽略--jsonArray,因为我有多个json文件没有被封装在[]中 – ankit9j 2017-07-30 08:49:41

0

这在MAC OS X

find . -regex '.*/[^/]*.json' | xargs -L 1 mongoimport --db DB_NAME -u USER_NAME -p PASSWORD --collection COLLECTION_NAME --file 
0

为我工作窗口 bat文件。如果你在文件夹中有一个json文件列表,这将会更好。和集合名称相匹配的文件

@echo off 
for %%f in (*.json) do (
    "mongoimport.exe" --db databasename --collection %%~nf --drop --file %%f 
) 
pause 
1

名称您可以通过这种方式也做到这一点:

for filename in *; do mongoimport --db <Database> --collection <Collection Name> --file $filename; done 
0

我将展示如何导入有效地仅使用Linux的终端众多的收藏品(它也适用于Mac)。

您必须将所有json文件放在同一个文件夹中,文件名应该是将要导入到数据库的集合。

因此,让我们开始,打开包含您的json文件的文件夹。更换<DATABASE>到你的数据库名称,然后执行以下行:

for collection in $(ls | cut -d'.' -f1); do mongoimport --db <DATABASE> --collection ${collection} --file ${collection}.json; done

但到底是怎么回事呢?

首先,您必须记住括号会先执行。在这种情况下,它会创建一个获取每个文件名称的所有文件的列表(删除它的扩展名)。

其次,所有的列表将被添加到一个循环“为”局部变量称为集合(这个变量的名称可以是任何你想要的)

第三,“做”执行导入线(*)

最后“完成”,完成循环。导入行由需要数据库名“--db”,集合名“--collection”和文件名“--file”的“mongoimport”组成。这些要求已经填写了变量“$收集”创建的“for”的东西

我希望帮助别人!祝你好运的家伙:)