我刚接触 mongodb
,想知道如何将一个服务器中的 json
文件导入到另一个服务器。我尝试了以下命令:mongoimport -d test -c bik check.json
,对我来说运行良好。现在我想知道当有多个 json
文件时该怎么导入全部。我找不到相关的文档,没写这是否可能。请帮助我,这是否可能以及如何操作。
我刚接触 mongodb
,想知道如何将一个服务器中的 json
文件导入到另一个服务器。我尝试了以下命令:mongoimport -d test -c bik check.json
,对我来说运行良好。现在我想知道当有多个 json
文件时该怎么导入全部。我找不到相关的文档,没写这是否可能。请帮助我,这是否可能以及如何操作。
我想到了一种更优雅的方式来自动导入所有的集合:
ls -1 *.json | sed 's/.json$//' | while read col; do
mongoimport -d db_name -c $col < $col.json;
done
我希望这对你有所帮助。
你可以编写一些shell脚本。
colls=( mycoll1 mycoll2 mycoll5 )
for c in ${colls[@]}
do
mongoimport -d mydb -c $c.json
done
mongorestore
可以正常工作。 - Sergio TulentsevWindows 批处理版本:
@echo off
for %%f in (*.json) do (
"mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json
)
你也可以用这种方式来完成:
for filename in *; do mongoimport --db <Database> --collection <Collection Name> --file $filename; done
这在我的MAC OS X上有效。
find . -regex '.*/[^/]*.json' | xargs -L 1 mongoimport --db DB_NAME -u USER_NAME -p PASSWORD --collection COLLECTION_NAME --file
针对Windows批处理文件,如果在文件夹中有一个JSON文件列表,并且集合名称与文件名匹配,则会更好。
@echo off
for %%f in (*.json) do (
"mongoimport.exe" --db databasename --collection %%~nf --drop --file %%f
)
pause
不确定这是否是一个新功能,但是mongoimport
现在可以从stdin读取。所以,导入多个JSON文件的方法就像这样简单:
cat *.json | mongoimport --uri "mongdb://user:password@host/db?option=value" --collection example
顺便提一下,我正在使用mongodb-tools v4.2.0。
更新
mongodbimport
可能会消耗大量内存,这可能导致系统 OOM 杀死程序。 我的机器有32GB RAM,在尝试导入 ~10GB 存储在RAM磁盘中的数据时,这种情况经常发生。
将相对较大的作业划分为批处理:
#!/usr/bin/env bash
declare -a json_files=()
for f in *.json; do
json_files+="$f"
if [[ "${#json_files[@]}" -ge 1000 ]]; then
cat "${json_files[@]}" | mongoimport --uri="mongodb://user:pass@host/db" --collection=examples -j8 #--mode=upsert --upsertFields=id1
json_files=()
fi
done
另外一种单行解决方案(假设您在存放JSON文件的文件夹内):
ls | sed 's/.json$//' | xargs -I{} mongoimport -d DATABASE_NAME -c {} {}.json
Linux:
> cat one.json two.json > three.json
> mongoimport --db foo --collection baz --file three.json"
或者,文件夹中的所有文件:
> cat *.json > big.json
> mongoimport --db foo --collection baz --file "big.json"
--headerline
和--type tsv
。非常简单。谢谢。 - agarcianmongoimport -d tpsmnew -c $col < $col.json --jsonArray;
,因为我遇到了这个错误:Failed: cannot decode array into a D。 - mohit jain