web-dev-qa-db-ja.com

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

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

mongoexport -d dbname -o Mongo.json

年です。結果:
コレクションが指定されていません。

マニュアルによれば、コレクションを指定しなければ、すべてのコレクションがエクスポートされます。
しかし、なぜこれがうまくいかないのですか?

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

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

267
aboutstudy

私のような怠惰な人々のために、私はそれがより速いmongodumpを使います:

mongodump -d <database_name> -o <directory_backup>

そしてそれを "restore/import"するために、私は使った(directory_backup/dump /から):

mongorestore -d <database_name> <directory_backup>

このソリューションでは、すべてのコレクションをそれぞれ収集して1つずつエクスポートする必要はありません。データベースを指定するだけです。私はビッグデータストレージにmongodump/mongorestoreを使用することを推奨します。それは非常に遅く、一度10/20GBのデータを過ぎると復元するのに数時間かかることがあります。

580
Mentor Reka

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

#!/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
51
Boris Pavlovic

以下の手順に従ってサーバーから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
25
AnoopGoudar

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

mongodump -d database_name -o directory_to_store_dumps

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

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored
21
Usman

Mongo DBをどこにインストールしたのか教えてください。 (UbuntuまたはWindows)

  • Windowsの場合:

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

    mongodump --dbデータベース名 - 保存するパス
    例: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 をご覧ください。
16
Ravichandran K

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

8
mark

Mongolab.comのようなリモートのmongoDBサーバーに接続したい場合は、接続認証情報を渡してください。

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

mongo --eval 'printjson(db.getCollectionNames())'を使ってコレクションのリストを取得してから、それらすべてに対してmongoexportを実行することができます。これがRubyの例です

  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
7
KailuoWang

これまでの回答でうまく説明されています。リモートのパスワードで保護されたデータベースを扱う場合に備えて、私は回答を追加しています。

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

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メソッド。

7
adamb0mb

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

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;
7
Michael

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

mongodump

すべてのデータベースとコレクションは、現在の場所にあるdumpというディレクトリに作成されます。

6
Rondo

私はたくさんの複雑な例を試した結果、非常に単純な方法でうまくいくことがわかりました。

ローカルからdbのダンプを取り、それをリモートインスタンスにインポートしたいと思いました。

ローカルマシン上:

mongodump -d databasename

それから私は自分のサーバーマシンにダンプをscpしました。

scp -r dump [email protected]:~

それからダンプの親ディレクトリから:

mongorestore 

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

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

6
Mister P

次のコマンドを使用してZipファイルを作成できます。指定されたデータベース{dbname}のZipファイルを作成します。後で以下のZipファイルを自分のDBにインポートできます。

Window filepath=C:\Users\Username\mongo 

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

エクスポートされたデータベースを復元するときに私にはうまくいったことがあります:

mongorestore -d 0 ./0 --drop

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

3
codecowboy

インデックスを含めて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回表示されていることに注意してください。私はデータベースがローカルであり、あなたが信任状を渡す必要がないと仮定します、しかしそれはmongomongoexportの両方でそれをするのは簡単です。

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

3
Tom Boutell

データベースから各コレクションをエクスポート/インポートするためにmongoexportおよびmongoimportを使用する場合は、このユーティリティを は役に立ちます。私は何度か同様のユーティリティを使用しました。

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
3
Ravish

すでに、RobomongoやMongochefのようなGUIを使ってそのような操作を実行できます。

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

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

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

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

2
Garreth McDaid
#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
1
manoj tiwari

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

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

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

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

C:> mongodump - ホストremote_ip_address:27017 --db -o C:/ユーザー/デスクトップ/一時フォルダ

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

  • WindowsのMongoDBデータベースをローカルマシンディレクトリC:/ Users/Desktop /一時フォルダー/ db-dirから「remote-server」にインポートするコマンド

C:> mongorestore - ホスト= ip - ポート= 27017 -d C:/ユーザー/デスクトップ/一時フォルダ/ db-dir

1

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

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

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

2)データベースをJSONにエクスポートしたい場合は、canmongoexportを使用してください。ただし、一度に1つずつコレクションを作成する必要があります(これは仕様によるものです)。しかし、私はデータベース全体を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
Ryan Taylor

ダンプの場合、DBは以下のコマンドに従います

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

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 =テスト

destination_path = C:\ Users\HP\Desktop

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

参照: o7planning

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)
0
Mani