Windows脚本导入导出Mongodb数据库文件实现备份与恢复

导出指定时间范围的数据

@echo off
setlocal
rem 提前将MongoDB安装的bin路径加到系统环境变量PATH里面,方便直接运行mongodump命令

if not exist D:\MongoDB_backup goto create

goto start    

:create

rem 如果没有创建导出文件目录,那么在此步骤创建
md D:\MongoDB_backup

rem 在备份路径下创建当天日期yyyyMM格式的文件夹保存数据库备份文件
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
  set t=%%a
)
:: format date to yyyyMM
set fdate=%t:~0,6%
set yy=%t:~0,4%
set mm=%t:~4,2%
set dd=%t:~6,2%
rem 拼接当前日期
set date_str=%yy%-%mm%-%dd%
rem 此处是获取当前日期,提供给 strat里的start_date参数
echo date_str is %date_str%
rem echo fdate is %fdate%

d:
cd D:\MongoDB_backup\

rem 以月份为单位创建目录
if not exist D:\MongoDB_backup\%fdate% goto createmm

:createmm
mkdir %fdate%

rem 以类型为单位创建目录
d:
cd D:\MongoDB_backup\%fdate%\
if not exist D:\MongoDB_backup\%fdate%\merge goto createmerge

:createmerge
mkdir %merge%

:start

:: 定义日期范围 当前日期
set "start_date=2023-09-21"

:: 将日期转换为UTC时间戳   因为是第二天备份前一天的数据,所以当前日期的时间戳为查询的结束日期
for /F "usebackq tokens=*" %%i in (`powershell -Command "Get-Date -Date '%start_date%' -UFormat '%%s'"`) do (
    set "end_timestamp=%%i"
)
rem 要减去8个小时才为0点
set /a "end_timestamp=end_timestamp-28800"

:: 计算下一天的日期
set /a "start_timestamp=end_timestamp-86400"



rem 将时间戳转换为日期对象,用于导出文件命名 此时要加上8个小时,不然的话日期命名是前一天
for /F "usebackq tokens=*" %%i in (`powershell -Command "([datetime]'1970-01-01').AddMilliseconds(%start_timestamp%000+28800000).ToString('yyyyMMdd')"`) do (
    set "formatted_date=%%i"
)

echo %start_timestamp%000
echo %end_timestamp%000

:: 导出数据到指定目录
mongoexport --host localhost --port 27017 --db test --collection testMongodbUser2 --query "{ \"createTime\": { \"$gte\": { \"$date\": { \"$numberLong\": \"%start_timestamp%000\" } }, \"$lte\": { \"$date\": { \"$numberLong\": \"%end_timestamp%000\" } } } }" --out "D:\MongoDB_backup\202309\merge\%formatted_date%.json"

endlocal

导入数据

导入数据时可使用java方法调用bat脚本,传递导入文件的位置

java 调用bat 脚本并传递参数

public void testImport() throws IOException {
        // 备份文件地址
        String param1 = "D:\\MongoDB_backup\\202309\\merge\\20230920.json";
        // 要还原到的集合
        String param2 = "testMongodbUser5";
        // param1和param2可以根据实际需求传递,需要几个参数就传递几个参数
        ProcessBuilder processBuilder = new ProcessBuilder("C:\\Users\\LXD\\Desktop\\mongodbImport.bat", param1,param2);
        Process process = processBuilder.start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
@echo off
setlocal

:: 定义导入文件路径,%1为java调用传递的第一个参数
set "import_file=%1"

:: 定义目标数据库和集合名
set "database=test"
rem set "collection=testMongodbUser4"

:: 导入文件到 MongoDB   %2为java调用传递的第二个参数
mongoimport --db %database% --collection %2 --file %import_file%

echo import data to %database%-%2 success

endlocal
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值