多个数据库和集合mongodump

时间:2017-04-21 13:08:56

标签: bash mongodb mongodump

我有这样的事情:

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

我得到了:

  

不允许使用位置参数

如何对所有数据库中的所有集合使用mongodump

3 个答案:

答案 0 :(得分:4)

这是一个工作脚本:

  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

来自mongodump documentation

  

- 查询,-q

     

提供JSON文档作为可选择限制文档的查询   包含在mongodump的输出中。您必须将查询括在单引号(例如')中,以确保它不会与您的shell环境进行交互。

答案 1 :(得分:0)

用于多个数据库。

dbs=( z2p stackoverflow poststodos)  
for c in ${dbs[@]}
do
mongodump -d  $c  --out ~/backups/dump
done

答案 2 :(得分:0)

您可以尝试一下此脚本,该脚本提供了一个名为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

我将其放置在here