Reputation: 545
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 ?
Upvotes: 4
Views: 15862
Reputation: 482
you may give this script a try, which provides a function called dump_by_filter
#!/bin/bash
# sudo apt install mongo-tools
# sudo apt install mongo-client
# dump(uri:string,col:string,out:string)
function dump {
local uri=$1
local col=$2
local out=$3
mongodump --forceTableScan --uri=$uri -c $col --out $out
}
# load(uri:string,dir:string)
function load {
local uri=$1
local dir=$2
mongorestore --drop --uri=$uri $dir
}
# list_col(uri:string,filter:string)
function list_col {
local res=`echo show collections |mongo $1 --quiet |grep $2`
echo $res
}
# dump(uri:string,filter:string,out:string)
function dump_by_filter {
local uri=$1
local filter=$2
local out=$3
local cols=$(list_col $uri $filter)
for col in $cols; do
dump $uri $col $out
echo dump $col to $out
done
}
FROM_URL="mongodb://127.0.0.1:27017/a"
TO_URL="mongodb://127.0.0.1:27017/b"
DIR="./out"
dump_by_filter $FROM_URL xx $DIR
load $TO_URL $DIR
i place it here
Upvotes: 0
Reputation: 5590
For multiple database.
dbs=( z2p stackoverflow poststodos)
for c in ${dbs[@]}
do
mongodump -d $c --out ~/backups/dump
done
Upvotes: 2
Reputation: 9285
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.
Upvotes: 8