一次性导入多个MongoDB集合

4

我正在使用以下命令:

mongoimport --db 数据库名称

来导入一个我使用mongoexport导出的数据库。这个数据库有100多个集合,在mongoimport文档中,您需要指定集合名称和JSON文件。如何一次性导入所有集合,而不必为每个集合输入一个命令?

4个回答

5

很惊讶地发现,没有易于查找的导入多个集合的文档。当你搜索时,“恢复”数据库并不总是一个直观的关键词,但是当你想要从备份中恢复数据库时,这就是你想做的事情。如果你已经通过mongodump导出了一些集合的转储文件,你应该能够使用mongorestore

以下是实际需要运行的所有内容:

mongorestore --db db_name ./db_dumpfiles/

4
如果转储文件是 .json 格式,您可以使用导入脚本。
ls *.json | sed 's/.metadata.json//' | while read col; do mongoimport -d db_name -c $col < $col.metadata.json; done

如果dump文件是.json.gz格式,您可以使用导入脚本。
ls *.gz | sed 's/.metadata.json.gz//' | while read col; do mongoimport -d db_name --gzip -c $col < $col.metadata.json.gz; done

谢谢这个脚本。省了我很多打字的时间 :) - sasklacz

3
根据文档
新版本2.6中:如果您没有指定 --collection,mongoimport将从输入文件名中获取集合名称。如果输入文件具有扩展名,则MongoDB会从集合名称中省略文件的扩展名。
因此,它似乎应该一次导入一个集合。除非您编写一个shell脚本来执行此操作,否则我不知道其他方法。
mongodump和mongorestore更适合于一次性备份整个数据库,并在需要时进行恢复,正如同一文档的另一部分所述。
警告
避免使用mongoimport和mongoexport进行完整实例生产备份。它们不能可靠地保留所有丰富的BSON数据类型,因为JSON只能表示BSON支持的类型的子集。对于这种功能,请使用MongoDB备份方法中描述的mongodump和mongorestore。

同意,在生产环境中不要使用mongoimport或mongoexport,我曾经在执行这些操作时丢失过数据。 - lightning mcqueen

2
一个简单的命令。
mongorestore --db folder_name ./folder_name/

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