401

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

mongoexport -d dbname -o Mongo.json

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

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

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

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

4

31 に答える 31

812

怠惰な人には、 を使用mongodumpしてください。より高速です。

mongodump -d <database_name> -o <directory_backup>

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

mongorestore -d <database_name> <directory_backup>

このように、すべてのコレクションを個別に処理する必要はありません。データベースを指定するだけです。

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

于 2013-05-17T09:31:32.007 に答える
71

そのための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
于 2012-11-25T11:41:44.353 に答える
37

すべてのコレクションをエクスポートするには:

mongodump -d database_name -o directory_to_store_dumps

それらを復元するには:

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored
于 2016-02-04T12:48:05.253 に答える
22

Mongo DB をインストールした場所を教えてください。(UbuntuまたはWindowsのいずれか)

  • Windows の場合:
  1. エクスポートする前に、cmd プロンプトで Mongo DB に接続し、ローカル ホストに接続できることを確認する必要があります。

  2. 新しいコマンド プロンプトを開き、以下のコマンドを実行します。

    mongodump --db database name --out path to save  
    

    例えば:mongodump --db mydb --out c:\TEMP\op.json

  3. 詳細については、 https://www.youtube.com/watch?v=hOCp3Jv6yKoをご覧ください。

  • Ubuntu の場合:
  1. Mongo DB がインストールされている端末にログインし、Mongo DB に接続できることを確認します。

  2. 新しいターミナルを開き、以下のコマンドを実行します。

    mongodump -d database name -o file name to save  
    

    例えば:mongodump -d mydb -o output.json

  3. 詳細については、 https://www.youtube.com/watch?v=5Fwd2ZB86ggをご覧ください。

于 2015-11-03T08:10:55.217 に答える
12

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

mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json
于 2016-01-23T10:56:42.717 に答える
10

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

于 2012-08-31T12:29:36.547 に答える
9

を使用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
于 2012-11-28T21:03:53.533 に答える
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な方法でした。

于 2013-03-03T23:50:01.160 に答える
8

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

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

ローカル マシンで:

mongodump -d databasename

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

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

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

mongorestore 

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

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

于 2014-01-10T11:07:34.773 に答える
7

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

mongodump

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

于 2014-09-05T21:09:10.343 に答える
3

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

mongorestore -d 0 ./0 --drop

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

于 2016-03-27T17:32:30.033 に答える
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
于 2013-05-30T13:09:31.597 に答える
2

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

#!/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 ユーティリティを使用し、何も指定されていない場合はすべての DB をバックアップします。

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

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

于 2014-03-24T17:44:34.677 に答える
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)
于 2014-05-06T10:13:34.887 に答える