MongoDBのすべてのコレクションをエクスポートする方法は?


319

次のコマンドを使用して、MongoDBのすべてのコレクションをエクスポートします。

mongoexport -d dbname -o Mongo.json

結果は次のとおりです。
コレクションが指定されていません!

マニュアルによると、コレクションを指定しない場合、すべてのコレクションがエクスポートされます。
しかし、なぜこれが機能しないのですか?

http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection

MongoDBのバージョンは2.0.6です。


2
MongoDBのどのバージョンを使用していますか?mongoexportのwikiドキュメントは、これがコレクションをエクスポートするためのコマンドラインツールであることを示唆しています。おそらく、複数のコレクションをエクスポートする機能は新しいバージョンのものですか?データベース内のすべてのコレクションをバックアップする場合、mongodumpはすべてのコレクションをBSONにエクスポートします。
ステニー

1
すべてのコレクションにmongoexportを使用するオプションは、まだスケジュールされていない計画された機能であるようです:SERVER-201 ..したがって、mongodumpは現在、完全なデータベースをエクスポートするための最良のオプションです。MongoDBクライアントドライバーの 1つを使用して、mongoexportと同等のものを記述することはそれほど難しくありません。
ステニー

2
回答を承認済みとしてマークする必要があります。私の投票は、stackoverflow.com / a / 16605781/1686575
John Manko

記録として、MongoDBのドキュメントに、完全なインスタンスの本番環境のバックアップにmongoimportとmongoexportを使用しないように記載されています。JSONはBSONでサポートされるタイプのサブセットのみを表すことができるため、すべてのリッチBSONデータタイプを確実に保持するわけではありません。この種類の機能については、MongoDBのバックアップ方法で説明されているように、mongodumpとmongorestoreを使用してください。メンター・レカが述べているように、それは怠惰な人々のためだけではなく、これを行うための好ましい方法でもあります。
samurai_jane

回答:


687

怠惰な人はを使用mongodumpしてください。

mongodump -d <database_name> -o <directory_backup>

そして、それを「復元/インポート」するには(directory_backup / dump /から):

mongorestore -d <database_name> <directory_backup>

これにより、すべてのコレクションを個別に処理する必要がなくなります。データベースを指定するだけです。

ビッグデータストレージにはmongodump / mongorestoreを使用しないことをお勧めします。処理速度は非常に遅く、10 / 20GBを超えるデータを取得すると、復元に数時間かかる場合があります。


2
JSONとBSONの間に互換性の問題はありませんか?
JulienFr 2014年

5
バージョン2.2以降のmongodumpで使用されるデータ形式は、以前のバージョンのmongodと互換性がありません。古いバージョンのデータストアのバックアップには、mongodumpの最新バージョンを使用しないでください。
n0nSmoker

4
復元コマンドは "mongorestore -b DATABASE ./dump-folder"(ここで./dump-folderはパスまたはエクスポートされたデータです)だと思いました。
Thomas Decaux、2015

47
"mongorestore -d DATABASE ./dump-folder"
kehers '13 / 03/15

2
@LucaSteeb use --excludeCollection = sessions
Zim

60

そのためにbashスクリプトを書きました。2つのパラメーター(データベース名、ファイルを格納するためのdir)を指定して実行するだけです。

#!/bin/bash

if [ ! $1 ]; then
        echo " Example of use: $0 database_name [dir_to_store]"
        exit 1
fi
db=$1
out_dir=$2
if [ ! $out_dir ]; then
        out_dir="./"
else
        mkdir -p $out_dir
fi

tmp_file="fadlfhsdofheinwvw.js"
echo "print('_ ' + db.getCollectionNames())" > $tmp_file
cols=`mongo $db $tmp_file | grep '_' | awk '{print $2}' | tr ',' ' '`
for c in $cols
do
    mongoexport -d $db -c $c -o "$out_dir/exp_${db}_${c}.json"
done
rm $tmp_file

1
インポートするには: for file in *.json; do c=${file#*exp_yourdbname_}; c=${c%.json}; mongoimport --db yourdbname --collection "${c}" --file "${file}"; done
Bradford、

バッチスクリプトを使用して.csvをインポートしたいのですが、何かアイデアはありますか?
Prasanth Jaya、2015

29

以下の手順に従って、サーバーからmongodumpを作成し、ユーザー名とパスワードを持つ別のサーバー/ローカルマシンにインポートします。

1. mongodump -d dbname -o dumpname -u username -p password
2. scp -r user@remote:~/location/of/dumpname ./
3. mongorestore -d dbname dumpname/dbname/ -u username -p password

27

mongodumpを使用してすべてのコレクションをエクスポートするには、次のコマンドを使用します

mongodump -d database_name -o directory_to_store_dumps

復元するには、このコマンドを使用します

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored

私はそうし、CMDからmongodump -d mongo -o path\to\Desktop\blogを取得しSyntaxError: missing ; before statementました。:(
Razvan Zamfir

18

Mongo DBをインストールした場所をお知らせください。(UbuntuまたはWindows)

  • Windowsの場合:

    1. エクスポートする前に、cmdプロンプトでMongo DBに接続し、ローカルホストに接続できることを確認する必要があります。
    2. 新しいcmdプロンプトを開き、以下のコマンドを実行します。

    mongodump --dbデータベース名--out保存するパス
    例:mongodump --db mydb --out c:\ TEMP \ op.json

    1. 訪問https://www.youtube.com/watch?v=hOCp3Jv6yKo詳細について。
  • Ubuntuの場合:

    1. Mongo DBがインストールされている端末にログインし、Mongo DBに接続できることを確認します。
    2. 新しいターミナルを開いて、以下のコマンドを実行します。

    mongodump -dデータベース名-o保存するファイル名
    例:mongodump -d mydb -o output.json

    1. 訪問https://www.youtube.com/watch?v=5Fwd2ZB86ggの詳細については。

12

以前の答えはそれをうまく説明しました、あなたがリモートのパスワードで保護されたデータベースを扱っている場合の助けとして私の答えを追加しています

mongodump --host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path

10

mongolab.comなどのリモートmongoDBサーバーに接続する場合は、接続資格情報を渡す必要があります。

mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json

2
このソリューションは、元の質問に適切に回答するため、最適です。
ttemple

JSONはBSONでサポートされるタイプのサブセットしか表現できないため、これはすべてのリッチBSONデータタイプを確実に保持するわけではないことに注意してください。この種類の機能については、MongoDBのバックアップ方法で説明されているように、mongodumpとmongorestoreを使用してください。(ドキュメント
Z.クラ18.

8

bson形式で問題がない場合は、mongodumpユーティリティを同じ-dフラグで使用できます。すべてのコレクションをダンプディレクトリ(デフォルト、-oオプションで変更可能)にbson形式でダンプします。その後、mongorestoreユーティリティを使用してこれらのファイルをインポートできます。


8

を使用mongo --eval 'printjson(db.getCollectionNames())'してコレクションのリストを取得し、それらすべてに対してmongoexportを実行できます。これはルビーの例です

  out = `mongo  #{DB_HOST}/#{DB_NAME} --eval "printjson(db.getCollectionNames())"`

  collections = out.scan(/\".+\"/).map { |s| s.gsub('"', '') }

  collections.each do |collection|
    system "mongoexport --db #{DB_NAME}  --collection #{collection}  --host '#{DB_HOST}' --out #{collection}_dump"
  end

これはいいですが、おそらくout.scanの正規表現を貪欲にしないほうがいいでしょう。out.scan(/\".+?\"/).map { |s| s.gsub('"', '') }
ケーシー

8

Windowsバッチスクリプトバージョンが必要でした。このスレッドは役に立ったので、私も自分の答えを投稿したいと思いました。

mongo "{YOUR SERVER}/{YOUR DATABASE}" --eval "rs.slaveOk();db.getCollectionNames()" --quiet>__collections.txt
for /f %%a in ('type __collections.txt') do @set COLLECTIONS=%%a
for %%a in (%COLLECTIONS%) do mongoexport --host {YOUR SERVER} --db {YOUR DATABASE} --collection %%a --out data\%%a.json
del __collections.txt

を使用して問題が発生したset /p COLLECTIONS=<__collections.txtため、複雑なfor /f方法を使用しました。


8

多くの複雑な例を試した後、非常に単純なアプローチがうまくいくことがわかりました。

ローカルからdbのダンプを取り、それをリモートインスタンスにインポートしたかっただけです。

ローカルマシン:

mongodump -d databasename

次に、ダンプをサーバーマシンにscpしました。

scp -r dump user@xx.xxx.xxx.xxx:~

次に、ダンプの親ディレクトリから単純に:

mongorestore 

そして、それはデータベースをインポートしました。

もちろん、mongodbサービスが実行されていると仮定します。


7

必要に応じて、指定せずにすべてのコレクションをcsvにエクスポートできます--fields(すべてのフィールドをエクスポートします)。

http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/から、このbashスクリプトを実行します

OIFS=$IFS;
IFS=",";

# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
host=HOSTNAME:PORT

# first get all collections in the database
collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);

# for each collection
for ((i=0; i<${#collectionArray[@]}; ++i));
do
    echo 'exporting collection' ${collectionArray[$i]}
    # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
    keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
    # now use mongoexport with the set of keys to export the collection to csv
    mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done

IFS=$OIFS;

6

すべてのデータベースのすべてのコレクションをダンプしたい場合(これは元の質問者の意図の広範な解釈です)、次を使用します。

mongodump

すべてのデータベースとコレクションは、「現在」の場所にある「ダンプ」と呼ばれるディレクトリに作成されます


6

あなたはmongodumpコマンドを使用してそれを行うことができます

手順1:コマンドプロンプトを開く

手順2:mongoDBインストールのbinフォルダーに移動します(C:\ Program Files \ MongoDB \ Server \ 4.0 \ bin)

手順3:次に、次のコマンドを実行します

mongodump -d your_db_name -o destination_path

your_db_name = test

destination_path = C:\ Users \ HP \ Desktop

エクスポートされたファイルは、destination_path \ your_db_nameフォルダーに作成されます(この例ではC:\ Users \ HP \ Desktop \ test)

参考資料:o7計画


5

これはかなり古い質問であり、インデックスを含めて100%忠実な結果が必要な場合は、mongodump / mongorestoreが明らかに正しい方法であることを理解しています。

しかし、特に奇妙なことが起こっていない限り、MongoDBの古いバージョンと新しいバージョンの間で前方互換性と後方互換性がある可能性が高い、迅速でダーティなソリューションが必要でした。そしてそのために私は元の質問への答えを求めていました。

上記の他の許容可能な解決策がありますが、このUnixパイプラインは比較的短くて便利です。

mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json

これにより、.jsonコレクションごとに適切な名前のファイルが作成されます。

データベース名( "mydatabase")が2回表示されることに注意してください。私はデータベースがローカルであり、資格情報を渡す必要がないと想定していますが、との両方mongoでそれを行うのは簡単mongoexportです。

古いバージョンのMongoDBが新しいシステムコレクションからシステムコレクションを解釈しようとするのを望まないため、私はgrep -vdiscard を使用していることに注意しsystem.indexesてください。代わりに、アプリケーションが通常のensureIndex呼び出しを行ってインデックスを再作成することを許可しています。


5

次のコマンドを使用してzipファイルを作成できます。提供されたデータベース{dbname}のzipファイルが作成されます。mongoDBに次のzipファイルを後でインポートできます。

Window filepath=C:\Users\Username\mongo 

mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname}

より明確にするために、次の情報を使用してくださいdocs.mongodb.com/manual/reference/program/mongodump
kumar31rajesh

3

エクスポートされたデータベースを復元するときに私のために働いたものは次のとおりです:

mongorestore -d 0 ./0 --drop

ここで./containedは、エクスポートされたbsonファイルです。--dropは既存のデータを上書きすることに注意してください。


3

mongoexportmongoimportを使用してデータベースから各コレクションをエクスポート/インポートする場合は、このユーティリティが役立つと思います。同様のユーティリティを数回使用しました。

LOADING=false

usage()
{
    cat << EOF
    usage: $0 [options] dbname

    OPTIONS:
        -h      Show this help.
        -l      Load instead of export
        -u      Mongo username
        -p      Mongo password
        -H      Mongo host string (ex. localhost:27017)
EOF
}

while getopts "hlu:p:H:" opt; do
    MAXOPTIND=$OPTIND

    case $opt in 
        h)
            usage
            exit
            ;;
        l)
            LOADING=true
            ;;
        u)
            USERNAME="$OPTARG"
            ;;
        p) 
            PASSWORD="$OPTARG"
            ;;
        H)
            HOST="$OPTARG"
            ;;
        \?)
            echo "Invalid option $opt"
            exit 1
            ;;
    esac
done

shift $(($MAXOPTIND-1))

if [ -z "$1" ]; then
    echo "Usage: export-mongo [opts] <dbname>"
    exit 1
fi

DB="$1"
if [ -z "$HOST" ]; then
    CONN="localhost:27017/$DB"
else
    CONN="$HOST/$DB"
fi

ARGS=""
if [ -n "$USERNAME" ]; then
    ARGS="-u $USERNAME"
fi
if [ -n "$PASSWORD" ]; then
    ARGS="$ARGS -p $PASSWORD"
fi

echo "*************************** Mongo Export ************************"
echo "**** Host:      $HOST"
echo "**** Database:  $DB"
echo "**** Username:  $USERNAME"
echo "**** Password:  $PASSWORD"
echo "**** Loading:   $LOADING"
echo "*****************************************************************"

if $LOADING ; then
    echo "Loading into $CONN"
    tar -xzf $DB.tar.gz
    pushd $DB >/dev/null

    for path in *.json; do
        collection=${path%.json}
        echo "Loading into $DB/$collection from $path"
        mongoimport $ARGS -d $DB -c $collection $path
    done

    popd >/dev/null
    rm -rf $DB
else
    DATABASE_COLLECTIONS=$(mongo $CONN $ARGS --quiet --eval 'db.getCollectionNames()' | sed 's/,/ /g')

    mkdir /tmp/$DB
    pushd /tmp/$DB 2>/dev/null

    for collection in $DATABASE_COLLECTIONS; do
        mongoexport --host $HOST -u $USERNAME -p $PASSWORD -db $DB -c $collection --jsonArray -o $collection.json >/dev/null
    done

    pushd /tmp 2>/dev/null
    tar -czf "$DB.tar.gz" $DB 2>/dev/null
    popd 2>/dev/null
    popd 2>/dev/null
    mv /tmp/$DB.tar.gz ./ 2>/dev/null
    rm -rf /tmp/$DB 2>/dev/null
fi

2

dbが呼び出されることを心配せずに、サーバー上のすべてのdbをバックアップする場合は、次のシェルスクリプトを使用します。

#!/bin/sh

md=`which mongodump`
pidof=`which pidof`
mdi=`$pidof mongod`
dir='/var/backup/mongo'

if [ ! -z "$mdi" ]
   then
        if [ ! -d "$dir" ]
           then
               mkdir -p $dir
           fi
        $md --out $dir >/dev/null 2>&1
   fi

これは、何も指定されていない場合にすべてのDBをバックアップするmongodumpユーティリティを使用します。

これをcronjobに入れると、mongodプロセスが実行されている場合にのみ実行されます。存在しない場合は、バックアップディレクトリも作成されます。

各DBバックアップは個別のディレクトリに書き込まれるため、グローバルダンプから個別のDBを復元できます。


2

まず、Mongo DBを起動します-そのためにパスに移動します->

C:\ Program Files \ MongoDB \ Server \ 3.2 \ binをクリックし、mongod.exeファイルをクリックしてMongoDBサーバーを起動します。

Windowsでエクスポートするコマンド

  • WindowsのMongoDBデータベースを「リモートサーバー」からローカルマシンのディレクトリC:/ Users / Desktop / temp-folderに、内部IPアドレスとポートを使用してリモートサーバーからエクスポートするコマンド。

C:> mongodump --host remote_ip_address:27017 --db -o C:/ Users / Desktop / temp-folder

Windowsでインポートするコマンド

  • WindowsのMongoDBデータベースをローカルマシンのディレクトリC:/ Users / Desktop / temp-folder / db-dirから「リモートサーバー」にインポートするコマンド

C:> mongorestore --host = ip --port = 27017 -d C:/ Users / Desktop / temp-folder / db-dir


1
#mongodump using sh script 
#!/bin/bash
TIMESTAMP=`date +%F-%H%M`
APP_NAME="folder_name"
BACKUPS_DIR="/xxxx/tst_file_bcup/$APP_NAME"
BACKUP_NAME="$APP_NAME-$TIMESTAMP"
/usr/bin/mongodump -h 127.0.0.1 -d <dbname> -o $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME
rm -rf /home/wowza_analytics_bcup/wowza_analytics/wowza_analytics
### 7 days old backup delete automaticaly using given command

find /home/wowza_analytics_bcup/wowza_analytics/ -mindepth 1 -mtime +7 -delete

0
  1. 接続を開く
  2. サーバーを起動する
  3. 新しいコマンドプロンプトを開く

書き出す:

mongo/bin> mongoexport -d webmitta -c domain -o domain-k.json

インポート:

mongoimport -d dbname -c newCollecionname --file domain-k.json

どこ

webmitta(db name)
domain(Collection Name)
domain-k.json(output file name)

輸出用のmongoexportです
Cyril Duchon-Doris 2014

5
問題は、すべてのコレクションのエクスポートについてです。
JJJ 2014年

0

やりたいことに応じて、複数のオプションがあります

1)データベースを別のmongoデータベースにエクスポートする場合は、を使用する必要がありますmongodump。これにより、JSONにはないメタデータを持つBSONファイルのフォルダーが作成されます。

mongodump
mongorestore --host mongodb1.example.net --port 37017 dump/

2)データベースをJSONにエクスポートする場合は、一度に1つのコレクションを実行する必要があることmongoexportを除いて使用できます(これは設計によるものです)。ただし、データベース全体をエクスポートしてmongodumpからJSONに変換するのが最も簡単だと思います。

# -d is a valid option for both mongorestore and mongodump

mongodump -d <DATABASE_NAME>
for file in dump/*/*.bson; do bsondump $file > $file.json; done

0

ダンプの場合、DBは以下のCMDを無効にします

   mongodump -d <your d name> -o <dump path>
Ex:mongodump -d qualetics -o D:\dbpackup\qualetics

-3

JSON形式でエクスポートするには、表示される次のコマンドを実行します。

mongoexport --db dbname --collection collectionName --out directoryPATH/JSONfileName.json
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.