Bagaimana cara mengekspor semua koleksi di MongoDB?


320

Saya ingin mengekspor semua koleksi di MongoDB dengan perintah:

mongoexport -d dbname -o Mongo.json

Hasilnya adalah:
Tidak ada koleksi yang ditentukan!

Manual mengatakan, jika Anda tidak menentukan koleksi, semua koleksi akan diekspor.
Namun, mengapa ini tidak berhasil?

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

Versi MongoDB saya adalah 2.0.6.


2
MongoDB versi apa yang Anda gunakan? Dokumentasi wiki untuk mongoexport menyarankan ini adalah alat baris perintah untuk mengekspor koleksi. Mungkin kemampuan untuk mengekspor beberapa koleksi adalah untuk versi yang lebih baru? Jika Anda ingin mencadangkan semua koleksi dalam database, mongodump akan mengekspor semua koleksi ke BSON.
Stennie

1
Sepertinya opsi untuk menggunakan mongoexport untuk semua koleksi adalah fitur terencana yang belum dijadwalkan: SERVER-201 .. jadi mongodump saat ini adalah pilihan terbaik Anda untuk mengekspor database lengkap. Tidak akan terlalu sulit untuk menulis setara dengan mongoexport menggunakan salah satu driver klien MongoDB .
Stennie

2
Anda harus menandai jawaban yang diterima. Pilihan saya adalah untuk stackoverflow.com/a/16605781/1686575
John Manko

Sebagai catatan, dokumentasi MongoDB menyatakan Hindari menggunakan mongoimport dan mongoexport untuk cadangan produksi penuh. Mereka tidak secara andal memelihara semua tipe data BSON yang kaya, karena JSON hanya bisa mewakili sebagian tipe yang didukung oleh BSON. Gunakan mongodump dan mongorestore seperti yang dijelaskan dalam Metode Cadangan MongoDB untuk fungsi semacam ini. Jadi bukan hanya untuk orang-orang malas seperti yang dikatakan Mentor Reka, tetapi juga metode yang disukai untuk melakukan ini.
samurai_jane

Jawaban:


687

Untuk orang malas, gunakan mongodump, lebih cepat:

mongodump -d <database_name> -o <directory_backup>

Dan untuk "mengembalikan / mengimpornya" (dari directory_backup / dump /):

mongorestore -d <database_name> <directory_backup>

Dengan cara ini, Anda tidak perlu menangani semua koleksi secara individual. Cukup tentukan database.

Perhatikan bahwa saya akan merekomendasikan untuk tidak menggunakan mongodump/ mongorestoreuntuk penyimpanan data besar . Ini sangat lambat dan setelah Anda melewati 10 / 20GB data, butuh berjam-jam untuk memulihkan.


2
Apakah tidak ada masalah kompatibilitas antara JSON dan BSON?
JulienFr

5
Format data yang digunakan oleh mongodump dari versi 2.2 atau yang lebih baru tidak kompatibel dengan versi mongod sebelumnya. Jangan gunakan versi terbaru dari mongodump untuk mencadangkan penyimpanan data yang lebih lama.
n0nSmoker

4
Saya percaya perintah restore adalah "mongorestore -b DATABASE ./dump-folder" (di mana ./dump-folder adalah path atau data yang diekspor).
Thomas Decaux

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

2
@LucaSteeb menggunakan --excludeCollection = sesi
Zim

60

Saya menulis bash script untuk itu. Jalankan saja dengan 2 parameter (nama database, dir untuk menyimpan file).

#!/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
Untuk mengimpor: for file in *.json; do c=${file#*exp_yourdbname_}; c=${c%.json}; mongoimport --db yourdbname --collection "${c}" --file "${file}"; done
Bradford

saya ingin mengimpor .csv menggunakan skrip batch, apakah Anda punya ide?
Prasanth Jaya

29

Ikuti langkah-langkah di bawah ini untuk membuat mongodump dari server dan impor server lain / mesin lokal yang memiliki nama pengguna dan kata sandi

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

Mengekspor semua koleksi menggunakan mongodump menggunakan perintah berikut

mongodump -d database_name -o directory_to_store_dumps

Untuk memulihkan, gunakan perintah ini

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored

Saya lakukan mongodump -d mongo -o path\to\Desktop\blogdan saya dapatkan SyntaxError: missing ; before statementdari CMD. :(
Razvan Zamfir

18

Beri tahu kami di mana Anda telah menginstal Mongo DB Anda? (baik di Ubuntu atau di Windows)

  • Untuk Windows:

    1. Sebelum mengekspor Anda harus terhubung ke Mongo DB Anda di cmd prompt dan pastikan Anda dapat terhubung ke host lokal Anda.
    2. Sekarang buka prompt cmd baru dan jalankan perintah di bawah ini,

    mongodump --db nama database --out path untuk menyimpan
    mis: mongodump --db mydb --out c: \ TEMP \ op.json

    1. Kunjungi https://www.youtube.com/watch?v=hOCp3Jv6yKo untuk detail lebih lanjut.
  • Untuk Ubuntu:

    1. Login ke terminal Anda di mana Mongo DB diinstal dan pastikan Anda dapat terhubung ke Mongo DB Anda.
    2. Sekarang buka terminal baru dan jalankan perintah di bawah ini,

    mongodump -d nama database -o nama file yang akan disimpan
    misalnya: mongodump -d mydb -o output.json

    1. Kunjungi https://www.youtube.com/watch?v=5Fwd2ZB86gg untuk rincian lebih lanjut.

12

Jawaban sebelumnya menjelaskannya dengan baik, saya menambahkan jawaban saya untuk membantu jika Anda berurusan dengan basis data yang dilindungi kata sandi jarak jauh

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

10

Jika Anda ingin menghubungkan server mongoDB jarak jauh seperti mongolab.com, Anda harus memberikan kredensial koneksi misalnya.

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

2
Solusi ini adalah yang terbaik karena menjawab dengan benar pertanyaan awal.
ttemple

Perhatikan bahwa ini tidak secara andal mempertahankan semua tipe data BSON yang kaya, karena JSON hanya bisa mewakili sebagian tipe yang didukung oleh BSON. Gunakan mongodump dan mongorestore seperti yang dijelaskan dalam Metode Cadangan MongoDB untuk fungsi semacam ini. ( docs )
Z. Khullah

8

Jika Anda OK dengan format bson, maka Anda dapat menggunakan utilitas mongodump dengan flag -d yang sama. Ini akan membuang semua koleksi ke direktori dump (default, dapat diubah melalui opsi -o) dalam format bson. Anda kemudian dapat mengimpor file-file ini menggunakan utilitas mongorestore.


8

Anda dapat menggunakan mongo --eval 'printjson(db.getCollectionNames())'untuk mendapatkan daftar koleksi dan kemudian melakukan mongoexport pada semuanya. Berikut adalah contoh di 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

Ini bagus, tetapi Anda mungkin ingin regex out.scan tidak serakah. out.scan(/\".+?\"/).map { |s| s.gsub('"', '') }
Casey

8

Saya membutuhkan versi skrip batch Windows. Utas ini bermanfaat, jadi saya pikir saya akan berkontribusi juga untuk jawaban saya.

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

Saya punya beberapa masalah menggunakan set /p COLLECTIONS=<__collections.txt, maka for /fmetode berbelit-belit .


8

Saya menemukan setelah mencoba banyak contoh berbelit-belit bahwa pendekatan yang sangat sederhana bekerja untuk saya.

Saya hanya ingin mengambil dump dari db dari lokal dan mengimpornya secara remote:

di mesin lokal:

mongodump -d databasename

maka saya scp'd dump saya ke mesin server saya:

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

lalu dari dir induk dari dump hanya:

mongorestore 

dan yang mengimpor basis data.

dengan asumsi layanan mongodb berjalan tentu saja.


7

Jika mau, Anda dapat mengekspor semua koleksi ke csv tanpa menentukan --fields (akan mengekspor semua bidang).

Dari http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ jalankan skrip bash ini

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

Anda dapat melakukannya menggunakan perintah mongodump

Langkah 1: Buka command prompt

Langkah 2: buka folder bin instalasi mongoDB Anda (C: \ Program Files \ MongoDB \ Server \ 4.0 \ bin)

Langkah 3: kemudian jalankan perintah berikut

mongodump -d your_db_name -o destination_path

your_db_name = tes

destination_path = C: \ Users \ HP \ Desktop

File yang diekspor akan dibuat di folder destination_path \ your_db_name (dalam contoh ini C: \ Users \ HP \ Desktop \ test)

Referensi: perencanaan


6

Jika Anda ingin membuang semua koleksi di semua basis data (yang merupakan interpretasi luas dari maksud penanya asli) maka gunakan

mongodump

Semua database dan koleksi akan dibuat di direktori yang disebut 'dump' di lokasi 'saat ini'


5

Saya menyadari bahwa ini adalah pertanyaan yang cukup lama dan bahwa mongodump / mongorestore jelas merupakan cara yang tepat jika Anda menginginkan hasil yang 100% setia, termasuk indeks.

Namun, saya membutuhkan solusi cepat dan kotor yang mungkin kompatibel dengan versi maju dan mundur antara MongoDB versi lama dan baru, asalkan tidak ada yang aneh terjadi. Dan untuk itu saya menginginkan jawaban untuk pertanyaan awal.

Ada solusi lain yang dapat diterima di atas, tetapi pipa Unix ini relatif pendek dan manis:

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

Ini menghasilkan .jsonfile dengan nama yang sesuai untuk setiap koleksi.

Perhatikan bahwa nama database ("mydatabase") muncul dua kali. Saya berasumsi bahwa basis datanya adalah lokal dan Anda tidak perlu memberikan kredensial tetapi mudah melakukannya dengan keduanya mongodan mongoexport.

Perhatikan bahwa saya menggunakan grep -vuntuk membuang system.indexes, karena saya tidak ingin versi MongoDB yang lebih lama mencoba menafsirkan kumpulan sistem dari yang lebih baru. Alih-alih, saya mengizinkan aplikasi saya melakukan ensureIndexpanggilan biasa untuk membuat ulang indeks.


5

Anda dapat membuat file zip dengan menggunakan perintah berikut. Ini akan membuat file zip dari database {dbname} yang disediakan. Anda kemudian dapat mengimpor file zip berikut di Anda mongo DB.

Window filepath=C:\Users\Username\mongo 

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

untuk lebih jelasnya gunakan info berikut docs.mongodb.com/manual/reference/program/mongodump
kumar31rajesh

3

Inilah yang bekerja untuk saya ketika memulihkan database yang diekspor:

mongorestore -d 0 ./0 --drop

di mana ./contained file bson yang diekspor. Perhatikan bahwa --dropakan menimpa data yang ada.


3

jika Anda ingin menggunakan mongoexport dan mongoimport untuk mengekspor / mengimpor setiap koleksi dari basis data, saya pikir utilitas ini dapat membantu Anda. Saya telah menggunakan utilitas serupa beberapa kali;

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

Jika Anda ingin mencadangkan semua dbs di server, tanpa harus khawatir db dipanggil, gunakan skrip shell berikut:

#!/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

Ini menggunakan utilitas mongodump, yang akan membuat cadangan semua DB jika tidak ada yang ditentukan.

Anda dapat menempatkan ini di cronjob Anda, dan itu hanya akan berjalan jika proses mongod sedang berjalan. Itu juga akan membuat direktori cadangan jika tidak ada.

Setiap cadangan DB ditulis ke direktori individual, sehingga Anda dapat mengembalikan DB individual dari dump global.


2

Pertama, dari Mulai Mongo DB - untuk itu pergi ke jalan sebagai ->

C: \ Program Files \ MongoDB \ Server \ 3.2 \ bin dan klik file mongod.exe untuk memulai server MongoDB.

Perintah di Windows untuk Ekspor

  • Perintah untuk mengekspor database MongoDB di Windows dari "remote-server" ke mesin lokal di direktori C: / Users / Desktop / temp-folder dari server jauh dengan alamat IP internal dan port.

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

Perintah di Windows untuk Mengimpor

  • Perintah untuk mengimpor database MongoDB di Windows ke "remote-server" dari direktori mesin lokal 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. Buka Koneksi
  2. Mulai server
  3. buka Command prompt baru

Ekspor:

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

Impor:

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

Dimana

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

Ini ekspor mongo untuk ekspor
Cyril Duchon-Doris

5
Pertanyaannya adalah tentang mengekspor semua koleksi.
JJJ

0

Ada beberapa opsi tergantung pada apa yang ingin Anda lakukan

1) Jika Anda ingin mengekspor database Anda ke database mongo lain, Anda harus menggunakan mongodump. Ini membuat folder file BSON yang memiliki metadata yang tidak dimiliki JSON.

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

2) Jika Anda ingin mengekspor database Anda ke JSON, Anda dapat menggunakan mongoexportkecuali Anda harus melakukannya satu koleksi pada satu waktu (ini adalah dengan desain). Namun saya pikir paling mudah untuk mengekspor seluruh database dengan mongodumpdan kemudian dikonversi ke 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

Untuk dump, DB Anda memberikan CMD di bawah ini

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

-3

Untuk mengekspor dalam format JSON, lakukan ini dengan mengikuti perintah yang dapat Anda lihat.

mongoexport --db dbname --collection collectionName --out directoryPATH/JSONfileName.json
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.