28

あるサーバーから別のサーバーにファイルをインポートするのは初めてでmongodb、知りたいです。json次のコマンドを試しましたが、mongoimport -d test -c bik check.json問題なく動作します。json複数のファイルがある場合、一度にすべてをインポートするにはどうすればよいか知りたいです。私はそれが書かれている関連文書を見つけることができませんでしたこれは不可能です。これが可能であり、どのように私を助けてください

4

13 に答える 13

34

すべてのコレクションを自動的にインポートするためのより洗練された方法を思いつきました。

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

これがお役に立てば幸いです。

于 2013-10-21T21:11:34.613 に答える
26

いつでもいくつかのシェルスクリプトを書くことができます。

colls=( mycoll1 mycoll2 mycoll5 )

for c in ${colls[@]}
do
  mongoimport -d mydb -c $c.json
done
于 2012-07-23T09:21:45.970 に答える
17

Windowsバッチバージョン:

@echo off
for %%f in (*.json) do (
    "mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json
)
于 2015-01-07T13:40:01.167 に答える
13

あなたもこの方法でそれを行うことができます:

for filename in *; do mongoimport --db <Database> --collection <Collection Name> --file $filename; done
于 2017-05-26T07:18:23.617 に答える
6

これはMACOSXで私のために働いた

find . -regex '.*/[^/]*.json' | xargs -L 1 mongoimport --db DB_NAME -u USER_NAME -p PASSWORD --collection COLLECTION_NAME  --file
于 2017-01-15T05:47:33.163 に答える
4

Windowsのbatファイルの場合。フォルダにjsonファイルのリストがある場合、これははるかに優れています。コレクション名はファイル内の名前と一致します

@echo off
for %%f in (*.json) do (
    "mongoimport.exe" --db databasename --collection %%~nf --drop --file %%f
)
pause
于 2017-03-17T15:41:15.037 に答える
2

別の1行の解決策(jsonファイルがあるフォルダーにいると仮定):

ls | sed 's/.json$//' | xargs -I{} mongoimport -d DATABASE_NAME -c {} {}.json
于 2018-04-05T13:56:28.327 に答える
2

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"
于 2018-12-07T18:27:05.777 に答える
2

ワンラインソリューション:

for /F %i in ('dir /b c:\files\*.json') do mongoimport.exe /d db /c files /file c:\file\%i

于 2019-07-01T11:30:17.390 に答える
2

これが新機能かどうかはわかりませんが、mongoimport実際にはstdinから読み取ることができます。したがって、複数のJSONファイルをインポートするためにできることは次のように簡単です。

cat *.json | mongoimport --uri "mongdb://user:password@host/db?option=value" --collection example

私はmongodb-toolsv4.2.0btwを使用しています。

アップデート

mongodbimport大量のメモリを消費する可能性があり、システムOOMによってプログラムが強制終了される可能性があります。私のマシンには32GBのRAMが搭載されており、RAMディスクに保存されている最大10GBのデータをインポートしようとすると、これが一貫して発生しました。

比較的大きなジョブをバッチに分割するには:

#!/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
于 2019-09-10T08:03:59.180 に答える
1

Linuxの端末のみを使用して多くのコレクションを効率的にインポートする方法を示します(Macでも機能します)。

すべてのjsonファイルが同じフォルダーにある必要があり、ファイルの名前はデータベースにインポートされるコレクションである必要があります。

それでは、始めましょう、jsonファイルを含むフォルダーを開きます。をデータベース名に置き換えて<DATABASE>から、次の行を実行します。

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

しかし、そこで何が起こっているのでしょうか?

まず、括弧が最初に実行されることを覚えておく必要があります。この場合、すべてのファイルのリストを作成し、各ファイルの名前だけを取得します(拡張子を削除します)。

次に、すべてのリストがコレクションと呼ばれるローカル変数の「for」ループに追加されます(この変数の名前は任意の名前にすることができます)

第三に、「do」はインポート行を実行します(*)

最後に「完了」し、ループを終了します。

(*)インポート行は、データベース名「--db」、コレクション名「--collection」、およびファイル名「--file」を必要とする「mongoimport」で構成されます。これらの要件は、「for」のもので作成された変数「$collection」によって満たされています。

私は誰かを助けたことを願っています!がんばれ :)

于 2017-07-19T02:47:35.830 に答える
1

ここでのソリューションを使用して、これをすばやく行うためにシェル関数をbashプロファイルに追加しました。

私の例は、各コレクションをコレクション名と拡張子を持つファイルとして出力するmongoエクスポートに依存しています.metadata.json

function mimport() { for filename in *; do collection="${filename%.metadata.json}"; mongoimport --db $1 --collection $collection --file $filename; done }

エクスポートファイルのパスで使用し、DB名をコマンドに渡します...

mimport my_db

すべてのコレクションをローカルホストのDBにロードします。

于 2018-10-04T02:21:46.227 に答える
0

Python:

from pathlib import Path
import subprocess

jsons_folder = "./out/"
mongodb_host = "172.22.0.3"
mongodb_port = "27017"
mongodb_user = "root"
mongodb_password = "1234"

for f in Path(jsons_folder).glob("*.json"):
    cmd = [
        "mongoimport", "-h", mongodb_host, "-p", mongodb_port, "--authenticationDatabase", "admin",
        "-u", mongodb_user, "-p", mongodb_password,
        "--db", "callscoring", "--collection", "scoring_result_entry", str(f.absolute())
    ]
    subprocess.run(cmd)
于 2021-11-15T13:37:11.137 に答える