# Mongodb数据迁移工具 **Repository Path**: blackcattle/data-migrate-mongo ## Basic Information - **Project Name**: Mongodb数据迁移工具 - **Description**: Mongodb数据迁移工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-25 - **Last Updated**: 2025-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MongoDB 数据迁移工具 ## 简介 本工具是一个用于 MongoDB 数据库数据迁移的实用程序,支持从源数据库到目标数据库的数据迁移、转换和验证。适用于数据迁移、备份恢复、数据同步等场景。 ## 功能特性 1. **数据迁移**:支持从源 MongoDB 数据库迁移数据到目标数据库。 2. **数据转换**:支持在迁移过程中对数据进行转换(如字段映射、数据过滤等)。 3. **增量同步**:支持基于时间戳或特定条件的增量数据同步。 4. **高性能**:支持并行迁移,提高数据迁移效率。 5. **日志记录**:打印迁移过程中的操作日志,便于排查问题。 ## 配置文件 ### 数据迁移配置 配置文件位于 `src/main/resources/application.yml`,主要包含以下配置项: 1. **源数据库配置 (`source`)** - `host`: 源数据库主机地址 - `port`: 源数据库端口 - `database`: 源数据库名称 - `authDb`: 认证数据库 - `username`: 用户名(可选) - `password`: 密码(可选) - `collection`: 源集合名称 - `findCommand`: 数据过滤条件(Mmongo查询条件) - `sortCommand`: 排序规则(Mongo排序) - `incrementField`: 增量字段(用于增量迁移) - `incrementInit`: 增量初始值 - `incrementReplace`: 增量字段值,运行过程中使用incrementField配置字段的值进行替换 - `limit`: 每次迁移的记录数 2. **目标数据库配置 (`target`)** - 配置项与源数据库类似,用于指定目标数据库和集合。 3. **转换规则 (`rules`)** - 每条规则包含以下字段: - `field`: 需要转换的字段名 - `action`: 转换操作类型(支持 `add`、`delete`、`rename`、`copy`、`date`、`format`、`change`、`seconds`、`milliseconds`) - `value`: 转换后的值(根据操作类型不同,含义不同) 4. **其他配置** - `fixedDelay`: 每次执行迁移的时间间隔(毫秒) ### 转换规则详解 参考 `TransferRule.java` 中的定义,转换规则支持以下操作类型: - **`add`**: 新增字段,`value` 为新字段的值。 - **`delete`**: 删除字段,`value` 为空。 - **`rename`**: 重命名字段,`value` 为新字段名。 - **`copy`**: 复制字段值,`value` 为新字段名。 - **`date`**: 将字符串转换为日期类型,`value` 为日期格式(如 `yyyy-MM-dd HH:mm:ss`)。 - **`format`**: 格式化日期,`value` 为目标格式(如 `yyyyMMddHHmmss`)。 - **`change`**: 转换数据类型,`value` 为目标类型(如 `Integer`、`Long`、`Float`、`Double`、`BigDecimal`)。 - **`seconds`**: 将时间戳转换为秒,`value` 为新字段名。 - **`milliseconds`**: 将时间戳转换为毫秒,`value` 为新字段名。 ### 示例配置 以下是一个完整的配置示例,展示了各种转换规则的使用: ```yaml data: migrate: plug: mongo # 每次执行迁移的时间间隔,毫秒 fixedDelay: 5000 mongo: # 源数据库 source: host: 10.10.1.166 port: 27017 database: data-migrate-dev authDb: admin username: password: collection: status_sensor # 数据过滤条件 findCommand: '{"onlinetag": "202009130001", "time": {"$gt": incrementTimeValue}}' # 排序 sortCommand: '{"time": 1}' # 增量字段,不需要增量迁移则留空。 incrementField: time # 增量初始值 incrementInit: 0 # 数据过滤条件中的替换字段,运行过程中使用incrementField配置字段的值进行替换,实现增量迁移。不需要增量迁移则留空。 incrementReplace: incrementTimeValue # 每次执行迁移查询的记录数,适当设置以便减少数据库压力 limit: 100 # 目标数据库和集合 target: host: 10.10.1.166 port: 27017 database: data-migrate-test authDb: admin username: password: collection: status_sensor # 转换规则,详见TransferRule rules: # 转换字段 - field: onlinetag # 转换操作类型:支持add、delete、rename、copy、date、format、change、seconds、milliseconds action: rename # 转换后的值 value: onlineTag - field: tenantId action: rename value: xxxTenantId - field: tenantId action: add value: fix-value - field: createTime action: copy value: createTimeOri - field: createTime action: date value: yyyy-MM-dd HH:mm:ss - field: createTime action: format value: yyyyMMddHHmmss - field: createTime action: change value: Long - field: createTimeOri action: copy value: time - field: time action: seconds value: time - field: pressure action: copy value: pressureOri - field: pressure action: change value: BigDecimal ``` ## 注意事项 1. 确保源数据库和目标数据库的连接信息正确。 2. 迁移前建议备份目标数据库,避免数据丢失。 3. 对于大型数据集,建议分批次迁移以减少内存占用。 4. 增量迁移时,`incrementField` 和 `incrementReplace` 必须配对使用。 5. 转换规则的顺序会影响最终结果,请根据需求合理安排规则顺序。 ## 贡献与反馈 欢迎提交 Issue 或 Pull Request 改进工具功能。如有问题,请联系项目维护者,邮箱 `dougs@sina.cn`。