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에 대한 위키 문서 는 이것이 콜렉션을 내보내기위한 명령 행 도구임을 제안합니다. 여러 컬렉션을 내보내는 기능이 최신 버전일까요? 데이터베이스의 모든 컬렉션을 백업하려면 mongodump 가 모든 컬렉션을 BSON으로 내 보냅니다.
Stennie

1
모든 컬렉션에 mongoexport를 사용하는 옵션은 아직 예약되지 않은 계획된 기능입니다. SERVER-201 . 따라서 mongodump는 현재 전체 데이터베이스를 내보내는 가장 좋은 옵션입니다. MongoDB 클라이언트 드라이버 중 하나를 사용하여 동등한 mongoexport를 작성하는 것은 그리 어렵지 않습니다 .
Stennie

2
답변을 수락 된 것으로 표시해야합니다. 내 투표는 stackoverflow.com/a/16605781/1686575
John Manko 2012

레코드의 경우 MongoDB 문서 에는 전체 인스턴스 프로덕션 백업에 mongoimport 및 mongoexport를 사용하지 마십시오. JSON은 BSON에서 지원하는 유형의 하위 세트 만 나타낼 수 있기 때문에 모든 풍부한 BSON 데이터 유형을 안정적으로 보존하지는 않습니다. 이러한 종류의 기능에 대해서는 MongoDB 백업 방법에 설명 된대로 mongodump 및 mongorestore를 사용하십시오. 따라서 Mentor Reka가 말한 것처럼 게으른 사람들뿐만 아니라이 작업을 수행하는 데 선호되는 방법이기도합니다.
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

5
버전 2.2 이상의 mongodump가 사용하는 데이터 형식은 이전 버전의 mongod와 호환되지 않습니다. 최신 버전의 mongodump를 사용하여 오래된 데이터 저장소를 백업하지 마십시오.
n0nSmoker

4
복원 명령은 "mongorestore -b DATABASE ./dump-folder"입니다 (여기서 ./dump-folder는 경로 또는 내 보낸 데이터 임).
Thomas Decaux

47
"mongorestore -d DATABASE의 ./dump-folder는"
kehers

2
@LucaSteeb 사용 --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

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를 설치 한 위치를 알려주십시오. (우분투 또는 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 를 방문 하십시오.
  • 우분투의 경우 :

    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를 사용하십시오 . ( docs )
Z. Khullah

8

bson 형식으로 OK이면 mongodump 유틸리티를 동일한 -d 플래그와 함께 사용할 수 있습니다. 모든 콜렉션을 bson 형식으로 덤프 디렉토리에 덤프합니다 (기본값은 -o 옵션을 통해 변경 가능). 그런 다음 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

모든 데이터베이스 및 콜렉션은 '현재'위치의 'dump'라는 디렉토리에 작성됩니다.


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 = 테스트

destination_path = C : \ 사용자 \ HP \ Desktop

내 보낸 파일은 destination_path \ your_db_name 폴더 (이 예에서는 C : \ Users \ HP \ Desktop \ test)에 생성됩니다.

참고 문헌 : o7planning


5

나는 이것이 오래된 질문이며 mongodump / mongorestore가 인덱스를 포함하여 100 % 충실한 결과를 원한다면 분명히 올바른 방법이라는 것을 알고 있습니다.

그러나 이전 버전과 새로운 버전의 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")이 두 번 나타납니다. 데이터베이스가 로컬이라고 가정하고 자격 증명을 전달할 필요는 없지만 mongo및 로 모두 쉽게 수행 할 수 mongoexport있습니다.

내가 사용하고 있습니다 grep -v폐기에 system.indexes나는 새로운 하나에서 시스템 모음을 해석하려고 MongoDB를의 이전 버전을 원하지 않기 때문에. 대신 응용 프로그램에서 일반적인 ensureIndex호출을 수행하여 인덱스를 다시 만들 수 있습니다.


5

다음 명령을 사용하여 zip 파일을 작성할 수 있습니다. 제공된 데이터베이스 {dbname}의 zip 파일을 작성합니다. 나중에 다음 zip 파일을 mongo DB로 가져올 수 있습니다.

Window filepath=C:\Users\Username\mongo 

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

더 명확하게 정보 infocs
kumar31rajesh

3

내 보낸 데이터베이스를 복원 할 때 나를 위해 일한 것은 다음과 같습니다.

mongorestore -d 0 ./0 --drop

./ 내 보낸 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

mongodump 유틸리티를 사용하는데, 지정하지 않으면 모든 DB를 백업합니다.

이것을 cronjob에 넣을 수 있으며 mongod 프로세스가 실행중인 경우에만 실행됩니다. 백업 디렉토리가 없으면 백업 디렉토리도 작성합니다.

각 DB 백업은 개별 디렉토리에 작성되므로 글로벌 덤프에서 개별 DB를 복원 할 수 있습니다.


2

먼저 Mongo DB 시작 중-경로로 이동하십시오->

C : \ Program Files \ MongoDB \ Server \ 3.2 \ bin을 클릭하고 mongod.exe를 클릭하십시오. 파일을 MongoDB 서버를 시작하십시오.

Windows에서 내보낼 명령

  • Windows의 MongoDB 데이터베이스를 "원격 서버"에서 내부 IP 주소 및 포트를 사용하여 원격 서버에서 C : / Users / Desktop / temp-folder 디렉토리의 로컬 시스템으로 내보내는 명령입니다.

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

5
문제는 모든 컬렉션을 내보내는 입니다.
JJJ

0

수행하려는 작업에 따라 여러 옵션이 있습니다

1) 데이터베이스를 다른 mongo 데이터베이스로 내보내려면을 사용해야합니다 mongodump. JSON에없는 메타 데이터가있는 BSON 파일 폴더가 생성됩니다.

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

2) 데이터베이스를 JSON으로 내보내려면 한 번에 하나의 컬렉션을 수행해야한다는 점을 제외하고 사용할 있습니다 mongoexport(설계 의도). 그러나 전체 데이터베이스를 내보내고 mongodumpJSON으로 변환하는 것이 가장 쉽다고 생각합니다 .

# -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.