我有这样的事情:
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
?
答案 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
- 查询,-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