programing

MongoDB에 있는 모든 컬렉션을 내보내려면 어떻게 해야 합니까?

nicegoodjob 2023. 3. 25. 13:07
반응형

MongoDB에 있는 모든 컬렉션을 내보내려면 어떻게 해야 합니까?

다음 명령으로 MongoDB의 모든 컬렉션을 내보냅니다.

mongoexport -d dbname -o Mongo.json

을 사용하다
컬렉션이 지정되지 않았습니다!

매뉴얼에서는 컬렉션을 지정하지 않으면 모든 컬렉션을 내보냅니다.
그데 왜왜 ?? ?? ?? ??

http://docs.mongodb.org/manual/reference/mongoexport/ #sublic option-mongo export -- 컬렉션

MongoDB 버전은 2.0.6입니다.

,으 for for for 합니다.mongodump더 , 더 빠릅니다.

mongodump -d <database_name> -o <directory_backup>

directory_backup/dump/에서 "복원/ Import"하려면:

mongorestore -d <database_name> <directory_backup>

이렇게 하면 모든 컬렉션을 개별적으로 처리할 필요가 없습니다.데이터베이스를 지정하기만 하면 됩니다.

, 는 의: 이이를 using note note note note note note note note note note note note note note note note note note note note note note note를 사용하지 않는 것을 추천합니다.mongodump/mongorestore빅데이터 스토리지에 적합합니다.매우 느리고 10/20을 지나면복원하는 데 몇 시간이 걸릴 수 있습니다.

그걸 위해 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

로컬 및 원격 덤프 및 복원의 경우:

로컬의 경우

로컬 덤프

mongodump -d mydb -o ./mongo-backup

로컬 복원

mongorestore -d mydb ./mongo-backup/mydb

리모트용

리모트 덤프

mongodump --uri "mongodb+srv://Admin:MYPASS@appcluster.15lf4.mongodb.net/mytestdb" -o ./mongo-backup

리모트 리스토어

mongorestore --uri "mongodb+srv://Admin:MYPASS@appcluster.15lf4.mongodb.net/mytestdb" ./mongo-backup/mytestdb

업데이트:

mongo 4.0을 사용하는 경우 스냅샷 오류가 발생할 수 있습니다. 그러면 다음 인수를 사용하여 실행할 수 있습니다.--forceTableScan자세한 내용은 여기를 참조하십시오.오류는 다음과 같습니다.

mongodump error reading collection: BSON field 'FindCommandRequest.snapshot' is an unknown field.

모든 컬렉션을 내보내려면:

mongodump -d database_name -o directory_to_store_dumps

복원하려면:

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored

서버에서 mongodump를 생성하여 사용자 이름과 비밀번호를 가진 다른 서버/로컬 머신을 Import하려면 다음 절차를 따릅니다.

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

Mongo DB를 설치한 위치를 알려주세요(Ubuntu 또는 Windows).

  • Windows 의 경우:
  1. 내보내기 전에 cmd 프롬프트에서 Mongo DB에 연결하고 로컬 호스트에 연결할 수 있는지 확인해야 합니다.

  2. 이제 새 cmd 프롬프트를 열고 다음 명령을 실행합니다.

    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 를 참조해 주세요.

이전 답변에서 잘 설명되었습니다. 원격 암호 보호 데이터베이스를 사용하는 경우 도움이 되도록 답변을 추가합니다.

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

인덱스를 포함한 100% 충실한 결과를 원한다면, 이것은 꽤 오래된 질문이며, mongodump/mongore store가 올바른 방법이라는 것을 알고 있습니다.

다만, 특별히 이상한 일이 일어나지 않는 한, 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각 컬렉션에 대해 파일을 작성합니다.

내 데이터베이스)를 사용하다만, 두 가지 로 쉽게 할 수 있습니다mongo ★★★★★★★★★★★★★★★★★」mongoexport.

가 사용하고 있는 '아예'입니다.grep -vsystem.indexes오래된 버전의 MongoDB가 새로운 버전의 시스템 컬렉션을 해석하려고 하지 않기 때문입니다. 나는 내 처럼 , its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its its 를 만들도록 허락하고 있다.ensureIndex를 호출하여 인덱스를 재생성합니다.

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\데스크탑

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

참고 자료: o7 계획

mongolab.com 와 같은 리모트 mongoDB 서버에 접속하는 경우는, 접속 credential을 전달할 필요가 있습니다.

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

bson 형식을 사용할 수 있는 경우 mongodump 유틸리티를 동일한 -d 플래그와 함께 사용할 수 있습니다.그러면 모든 컬렉션이 덤프 디렉토리에 덤프됩니다(기본값은 -o 옵션을 통해 변경할 수 있습니다).그런 다음 mongorestore 유틸리티를 사용하여 이러한 파일을 가져올 수 있습니다.

리모트 데이터베이스를 취급하고 있는 경우는, BSON 의 출력에 개의치 않는 한, 이러한 커맨드를 시험해 볼 수 있습니다.

1. gzip 아카이브로 덤프아웃하다

mongodump --uri="mongodb://YOUR_USER_ID:YOUR_PASSWORD@YOUR_HOST_IP/YOUR_DB_NAME" --gzip --archive > YOUR_FILE_NAME

2. restore (데이터베이스복사)

mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive

하시면 됩니다.mongo --eval 'printjson(db.getCollectionNames())'다음은 루비에서의 예시입니다.

  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

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방법.

여러 가지 복잡한 예를 시도해 본 결과, 매우 간단한 접근법이 나에게 효과가 있다는 것을 알게 되었다.

로컬에서 db 덤프를 가져와 리모트인스턴스로 Import하려고 합니다.

로컬 머신:

mongodump -d databasename

그리고 서버 머신에 덤프를 저장했습니다.

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

덤프의 부모 dir에서 간단하게 다음 작업을 수행합니다.

mongorestore 

데이터베이스를 Import했습니다.

물론 mongodb 서비스가 실행되고 있다고 가정합니다.

필요에 따라 모든 컬렉션을 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;

모든 데이터베이스에 있는 모든 컬렉션을 덤프하려면(원래 질문자의 의도를 광범위하게 해석함)

mongodump

모든 데이터베이스와 컬렉션은 '현재' 위치에 있는 '덤프'라는 디렉터리에 생성됩니다.

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

Window filepath=C:\Users\Username\mongo 

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

내보낸 데이터베이스를 복원할 때 도움이 되는 것은 다음과 같습니다.

mongorestore -d 0 ./0 --drop

./ 내보낸 bson 파일을 포함합니다.주의:--drop기존 데이터를 덮어씁니다.

mongo export와 mongo import를 사용하여 각 컬렉션을 데이터베이스에서 내보내거나 가져오고 싶다면 이 유틸리티가 도움이 될 입니다.비슷한 유틸리티를 여러 번 사용한 적이 있습니다.

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

이 문제가 있는 경우:Failed: can't create session: could not connect to server: connection() : auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.

그 후 추가--authenticationDatabase admin

예:

mongodump -h 192.168.20.30:27018 --authenticationDatabase admin -u dbAdmin -p dbPassword -d dbName -o path/to/folder

dbs가 호출될 염려 없이 서버상의 모든 dbs를 백업하려면 다음 셸 스크립트를 사용합니다.

#!/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를 복원할 수 있습니다.

나는 모든 컬렉션을 로보3t에 버린다.vagrant/homestead에서 다음 명령을 실행합니다.나에겐 일인데

mongodump --host localhost --port 27017 --db db_name --out db_path

일부 옵션은 현재 버전에서는 사용되지 않습니다.4.4.5내가 그것을 한 방법은 이렇다

mongodump --archive="my-local-db" --db=my


mongorestore --archive="my-local-db" --nsFrom='my.*' --nsTo='mynew.*'

restore에 대한 자세한 내용은http://https://docs.mongodb.com/database-tools/mongorestore/ 를 참조해 주세요.

먼저 Mongo DB 시작 - 경로로 이동합니다.->

C:\Program Files\MongoDB\Server\3.2\binmongod를 클릭합니다.exe 파일을 사용하여 MongoDB 서버를 시작합니다.

Windows에서 내보낼 명령어

  • "에서 "" 디렉토리 에 MongoDB C:/Users/Desktop/temp-folder리모트 서버로부터 내부 IP 주소와 포토를 취득합니다.
C:\> mongodump --host remote_ip_address:27017 --db <db-name> -o C:/Users/Desktop/temp-folder

Windows에서 Import할 명령어

  • 의 MongoDB 디렉토리 의 MongoDB에서 "remote-serverC:/Users/Desktop/temp-folder/db-dir
C:\> mongorestore --host=ip --port=27017 -d <db-name> C:/Users/Desktop/temp-folder/db-dir

이것은 당신의 목적을 달성하기 위한 가장 간단한 기술입니다.

mongodump -d db_name -o path/filename.json

#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)를 다른 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

mongo version 4에서도 모든 컬렉션을 한 번에 내보낼 수 있는 방법은 없습니다.다음 명령어를 사용하여 실행할 수 있는 포트 27017에서 실행되고 있는 로컬 MongoDB 인스턴스에서 지정된 컬렉션을 지정된 출력 파일로 내보냅니다.

.\mongoexport.exe --db=xstaging --collection=products --out=c:/xstaging.products.json

  1. 접속을 열다
  2. 서버를 기동합니다.
  3. open new 명령 프롬프트

내보내기:

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

Import:

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

어디에

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

언급URL : https://stackoverflow.com/questions/11255630/how-to-export-all-collections-in-mongodb

반응형