Windows平台下使用js脚本从MongoDB导出指定数据

业务需求

  1. 源数据库存储量达到20TB,索引数量上亿条
  2. 从数据库导出指定数据到目标数据库上,合计约1GB数据
  3. 需要保持相同的数据库名称和集合名词、数据位置

解决思路

导出数据的_id有一定数字规律,可以使用正则表达式去匹配批量导出,或者遍历命中索引逐个导出,但是正则匹配数字的字符串速度很慢,且需要全数据库匹配,少组数据测试后,对MongoDB调用js脚本逐个命中索引导出最快

处理步骤

一、准备目标数据库

  1. 在本地安装MongoDB数据库,默认安装即可

  2. 在磁盘上新建数据库目录,例如“D:\Hying\DBTest”

  3. 启动目标数据库,显示数据库控制台,查看启动状态

"D:\Program Files\MongoDB\Server\3.2\bin\mongod" --dbpath "D:\Hying\DBTest"

若需要关闭目标数据库,关闭数据库的控制台窗口即可

二、准备导出脚本

与数据库交互的方法属于MongoDB的内置驱动,可查询官方手册使用,遍历和字符串拼接等可使用JavaScript方法

test.js
// 连接对象
var conn_src = new Mongo("192.168.130.1:27017");
var conn_tgt = new Mongo("127.0.0.1:27017");
// 数据库对象
var db_name = "db_test";
var db_src = conn_src.getDB(db_name);
var db_tgt = conn_tgt.getDB(db_name);

// 遍历
for (var i = 0; i < 10086; ++i) {
  // 集合对象
  var co_name = "collection_" + i / 1000;
  var co_src = db_src.getCollection(co_name);
  var co_tgt = db_tgt.getCollection(co_name);
  
  // 查找并导出数据
  var doc = co_src.findOne({ _id: id + "-" + i });
  if (doc) co_tgt.insert(doc);
}

print("finished...");

三、执行脚本

"D:\Program Files\MongoDB\Server\3.2\bin\mongo" "D:\test.js"
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值