Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple databases and collections mongodump

I have something like this:

dbs=$(mongo --quiet --eval "db.getMongo().getDBNames()" --host exemple.com | \ 
            grep '"' | tr -d '"' | tr -d ',')

for db in $dbs; do
    cols=$(mongo --quiet --eval "print(db.getCollectionNames())" $db \
                  --host exemple.com | tr ',' ' ')
    for col in $cols; do
        mongodump --host example.com -q "{_id:{\$gt:$oid}}" \
                   -d $dbs -c $col --out /data/
   done
done

I'm getting:

positional arguments not allowed

How can I use mongodump for all collections in all databases ?

like image 606
basante Avatar asked Feb 04 '23 14:02

basante


2 Answers

Here is a working script:

  dbs=`mongo --eval "db.getMongo().getDBNames()" | grep '"' | tr -d '",' `


    for db in $dbs; do
        col=`mongo  $db --host example.com --quiet --eval "db.getCollectionNames()" | tr -d ',"[]' `
        for collection in $col; do
          mongodump --host example.com -q '{_id: {$gt: 10}}' -d $db -c $collection --out dump

       done
    done

from mongodump documentation :

--query , -q

Provides a JSON document as a query that optionally limits the documents included in the output of mongodump. You must enclose the query in single quotes (e.g. ') to ensure that it does not interact with your shell environment.

like image 160
felix Avatar answered Feb 08 '23 15:02

felix


For multiple database.

dbs=( z2p stackoverflow poststodos)  
for c in ${dbs[@]}
do
mongodump -d  $c  --out ~/backups/dump
done
like image 37
Ankit Kumar Rajpoot Avatar answered Feb 08 '23 17:02

Ankit Kumar Rajpoot