Comment exporter toute la collection dans MongoDB?

Je veux exporter toute la collection dans MongoDB par la commande:

mongoexport -d dbname -o Mongo.json 

Le résultat est:
Aucune collection spécifiée!

Dans le manuel, si vous ne spécifiez pas de collection, toutes les collections seront exscopes.
Cependant, pourquoi cela ne marche-t-il pas?

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

Ma version de MongoDB est 2.0.6

    Pour les paresseux comme moi, j’utilise mongodump, c’est plus rapide:

     mongodump -d  -o  

    Et pour “restaurer / importer” ça, j’ai utilisé (depuis le répertoire_backup / dump /):

     mongorestore -d   

    Avec cette solution, vous n’avez pas besoin de toutes les collections et d’exporter une par une. Il suffit de spécifier la firebase database. Je déconseille d’utiliser mongodump / mongorestore pour les stockages de données volumineuses . Il est très lent et une fois que vous avez dépassé 10/20 Go de données, cela peut prendre des heures à restaurer.

    J’ai écrit le script bash pour cela. Il suffit de l’exécuter avec 2 parameters (nom de la firebase database, dir pour stocker les fichiers).

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

    S’il vous plaît laissez-nous savoir où vous avez installé votre firebase database Mongo? (dans Ubuntu ou Windows)

    • Pour les fenêtres:

      1. Avant d’exporter, vous devez vous connecter à l’invite de commande Mongo DB à l’aide de l’invite de commande et vous assurer que vous pouvez vous connecter à votre hôte local.
      2. Maintenant, ouvrez une nouvelle invite cmd et exécutez la commande ci-dessous,

      mongodump –db nom de la firebase database –out chemin pour enregistrer
      Par exemple: mongodump –db mydb –out c: \ TEMP \ op.json

      1. Visitez https://www.youtube.com/watch?v=hOCp3Jv6yKo pour plus de détails.
    • Pour Ubuntu:

      1. Connectez-vous à votre terminal où Mongo DB est installé et assurez-vous de pouvoir vous connecter à votre firebase database Mongo.
      2. Maintenant, ouvrez un nouveau terminal et exécutez la commande ci-dessous,

      mongodump -d nom de la firebase database -o nom du fichier à enregistrer
      Par exemple: mongodump -d mydb -o output.json

      1. Visitez https://www.youtube.com/watch?v=5Fwd2ZB86gg pour plus de détails.

    Si vous êtes d’accord avec le format bson, vous pouvez utiliser l’utilitaire mongodump avec l’indicateur -d. Il va vider toutes les collections dans le répertoire dump (la valeur par défaut peut être modifiée via l’option -o) au format bson. Vous pouvez ensuite importer ces fichiers en utilisant l’utilitaire mongorestore.

    J’avais besoin de la version du script de lot Windows. Ce fil était utile, alors j’ai pensé y consortingbuer moi aussi.

     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 

    J’ai eu quelques problèmes avec set /p COLLECTIONS=<__collections.txt , d'où la méthode alambiquée for /f .

    L’exportation de toutes les collections à l’aide de mongodump utilise la commande suivante

    mongodump -d nom_base_de_données -o répertoire_where_mongodb_exists

    Pour restaurer, utilisez cette commande

     mongorestore -d database_name directory_backup_where_mongodb_tobe_restored 

    Suivez les étapes ci-dessous pour créer un mongodump à partir du serveur et l’importer sur un autre serveur / ordinateur local doté d’un nom d’utilisateur et d’un mot de passe.

     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 

    Vous pouvez utiliser mongo --eval 'printjson(db.getCollectionNames())' pour obtenir la liste des collections, puis effectuer un mongoexport sur chacune d’entre elles. Voici un exemple en 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 

    Si vous le souhaitez, vous pouvez exporter toutes les collections vers csv sans spécifier --fields (exportera tous les champs).

    De http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ exécutez ce script 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; 

    J’ai trouvé après avoir essayé de nombreux exemples compliqués que cette approche très simple a fonctionné pour moi.

    Je voulais juste prendre une sauvegarde d’une firebase database locale et l’importer sur une instance distante:

    sur la machine locale:

     mongodump -d databasename 

    puis je scp’d mon vidage sur mon serveur:

     scp -r dump [email protected]:~ 

    puis à partir du répertoire parent du vidage simplement:

     mongorestore 

    et qui a importé la firebase database.

    en supposant que le service mongodb fonctionne bien sûr.

    Si vous souhaitez vider toutes les collections de toutes les bases de données (ce qui constitue une interprétation détaillée de l’intention du questionneur original), utilisez

     mongodump 

    Toutes les bases de données et collections seront créées dans un répertoire appelé «dump» dans l’emplacement «actuel»

    vous pouvez créer un fichier zip en utilisant la commande suivante .Il va créer un fichier zip de la firebase database {dbname} fourni.Vous pouvez importer ultérieurement le fichier zip suivant dans votre firebase database mongo.

     Window filepath=C:\Users\Username\mongo mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname} 

    Les réponses précédentes l’ont bien expliqué, j’ajoute ma réponse pour vous aider si vous avez affaire à une firebase database protégée par mot de passe à distance

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

    Voici ce qui a fonctionné pour moi lors de la restauration d’une firebase database exscope:

    mongorestore -d 0 ./0 --drop

    où ./contient les fichiers bson exportés. Notez que --drop écrasera les données existantes.

    Je me rends compte que c’est une question assez ancienne et que mongodump / mongorestore est clairement la bonne solution si vous voulez un résultat 100% fidèle, y compris des index.

    Cependant, j’avais besoin d’une solution rapide et sale qui serait probablement compatible avec les anciennes et les nouvelles versions de MongoDB, à condition qu’il n’y ait rien de particulièrement farfelu. Et pour cela, je voulais la réponse à la question initiale.

    Il y a d’autres solutions acceptables ci-dessus, mais ce pipeline Unix est relativement court et doux:

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

    Cela produit un fichier .json nommé de manière appropriée pour chaque collection.

    Notez que le nom de la firebase database (“mydatabase”) apparaît deux fois. Je suppose que la firebase database est locale et que vous n’avez pas besoin de passer des informations d’identification, mais c’est facile avec mongo et mongoexport .

    Notez que j’utilise grep -v pour ignorer system.indexes , car je ne veux pas qu’une ancienne version de MongoDB tente d’interpréter une collection de systèmes à partir d’une version plus récente. Au lieu de cela, ensureIndex mon application à faire ses appels d’ ensureIndex à recréer les index.

    Si vous voulez utiliser mongoexport et mongoimport pour exporter / importer chaque collection de la firebase database, je pense que cet utilitaire peut vous être utile. J’ai utilisé deux fois le même utilitaire;

     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] " 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 

    Si vous souhaitez connecter un serveur mongoDB distant tel que mongolab.com, vous devez transmettre des informations de connexion, par exemple.

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

    Si vous voulez sauvegarder tous les dbs sur le serveur, sans avoir à vous soucier du nom des dbs, utilisez le script shell suivant:

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

    Cela utilise l’utilitaire mongodump, qui sauvegardera tous les DB si aucun n’est spécifié.

    Vous pouvez le mettre dans votre tâche cron, et cela ne fonctionnera que si le processus mongod est en cours d’exécution. Il créera également le répertoire de sauvegarde s’il n’en existe aucun.

    Chaque sauvegarde de firebase database est écrite dans un répertoire individuel, ce qui vous permet de restaurer des bases de données individuelles à partir de la sauvegarde globale.

    Vous pouvez déjà effectuer ces opérations avec une interface graphique comme Robomongo ou Mongochef.

     #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  -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. Ouvrir la connexion
    2. Démarrer le serveur
    3. ouvrir une nouvelle invite de commande

    Exportation:

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

    Importer:

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

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