在Docker容器上执行mongoimport

30

我使用Docker进行开发。

docker exec -it <My-Name> mongo

我想从JSON文件中将数据导入到MongoDB,但是失败了。

命令为:

mongoimport -d <db-name> -c <c-name> --file xxx.json

我该怎么办?


1
你能分享一下失败信息吗? - tgogos
4个回答

46

根据您的描述,您的主机上有一个JSON格式的数据文件,并且您想将这些数据导入正在容器中运行的mongodb中。

您可以按照以下步骤执行此操作。

#>docker exec -it <container-name> mongo
#>docker cp xxx.json <container-name-or-id>:/tmp/xxx.json
#>docker exec <container-name-or-id> mongoimport -d <db-name> -c <c-name> --file /tmp/xxx.json
在最后一步,您必须使用容器中可用的文件路径。 如果需要更多调试,您可以登录到容器中并像在Linux机器上执行一样执行。
#>docker exec -it <container-name-or-id> sh
sh $>cat /tmp/xxx.json
sh $>mongoimport -d <db-name> -c <c-name> --file /tmp/xxx.json

1
正确的命令是 #>docker cp xxx.json <container-name-or-id>:/tmp/xxx.json。谢谢。 - Chars Davy
现在已经更新了答案,谢谢。 - fly2matrix
1
某种原因,第二行最终会出现“未捕获异常:SyntaxError:意外的令牌:标识符:”,这是什么原因? - delimiter

18

无需复制文件即可运行:

docker exec -i <container-name-or-id> sh -c 'mongoimport -c <c-name> -d <db-name> --drop' < xxx.json

4
这不是一个好的答案,因为它没有解释。但它对我起作用了。 - Martijn
失败:(未经授权)命令“drop”需要身份验证。 - hu7sy
使用--jsonArray选项 - m.nikzad

5
  • 步骤1:从主机终端导航到JSON文件所在的目录。
  • 步骤2:使用命令“docker cp xxx.json mongo:/tmp/xxx.json”将JSON文件从当前主机目录复制到容器“tmp”目录。
  • 步骤3:使用命令“docker container exec -it mongo bash”导航到容器命令 shell。
  • 步骤4:使用命令“mongoimport --uri="<mongodb连接URI>" —collection=<集合名称> --file /tmp/xxx.json”将"tmp"文件夹中的集合导入容器数据库。

2
当你对某人花时间准备的答案进行负面评价时,请花些时间添加一些建设性反馈,以评论的形式。这有助于人们了解他们提供的答案如何改进,并允许Stack Overflow社区继续发展。 - Mr Slim

0
我们有:
  1. 在docker容器中运行的mongodb。
  2. 要从本地机器导入的JSON文件
  3. 本地机器上的mongoimport.exe
要导入此JSON文件作为集合,需要做什么:
mongoimport --uri=<connection-string> --collection=<collection-name> --file=<path-to-file>

例子:

mongoimport --uri="mongodb://localhost:27017/test" --collection=books --file:"C:\Data\books.json"

有关mongoimport的更多详细信息,请参见https://www.mongodb.com/docs/database-tools/mongoimport/


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