MongoDB

关注公众号 jb51net

关闭
首页 > 数据库 > MongoDB > MongoDB集合重命名

MongoDB集合重命名的完整指南

作者:Seal^_^

本文全面介绍了MongoDB集合重命名操作,包含以下核心内容: 两种重命名方式:同数据库(仅更新元数据)和跨数据库(实际数据迁移) 详细命令语法和参数,需要的朋友可以参考下

1. 集合重命名架构总览

2. renameCollection命令详解

2.1 命令语法结构

db.adminCommand({
  renameCollection: "<source_db>.<source_collection>",
  to: "<target_db>.<target_collection>",
  dropTarget: <boolean>,  // 可选
  stayTemp: <boolean>     // 可选(4.4+)
})

2.2 参数说明表格

参数类型必填描述默认值
renameCollectionstring源集合完全限定名-
tostring目标集合完全限定名-
dropTargetboolean是否覆盖目标集合false
stayTempboolean是否保留临时状态false

3. 重命名操作流程图

4. 不同场景下的重命名操作

4.1 同数据库重命名

// 基本语法
db.adminCommand({
  renameCollection: "test.products_old",
  to: "test.products_new"
})

// 验证结果
use test
show collections

例子:

db.adminCommand({
  renameCollection: "mytest_db.products",
  to: "mytest_db.products_new"
})

// 验证结果
show collections

4.2 跨数据库重命名

// 跨数据库重命名
db.adminCommand({
  renameCollection: "dev.users",
  to: "prod.customers"
})

// 强制覆盖目标集合
db.adminCommand({
  renameCollection: "dev.logs",
  to: "prod.app_logs",
  dropTarget: true
})

5. 重命名操作特性

5.1 保留的集合属性

属性是否保留备注
文档数据全部迁移
索引包括自定义索引
分片配置需重新配置
视图依赖需手动更新
验证规则保持原样

5.2 性能影响对比

操作类型锁级别资源消耗耗时
同DB重命名全局写锁
跨DB重命名全局写锁高(数据复制)

6. 权限与安全配置

6.1 所需权限矩阵

操作源DB权限目标DB权限
同DB重命名renameCollection-
跨DB重命名readWritedbAdmin

6.2 创建专用角色

use admin
db.createRole({
  role: "collectionAdmin",
  privileges: [
    {
      resource: { db: "", collection: "" },
      actions: ["renameCollection"]
    }
  ],
  roles: []
})

7. 高级应用场景

7.1 临时集合处理

// 创建临时集合
db.temp_data.insertMany([...])

// 重命名并保留临时状态(4.4+)
db.adminCommand({
  renameCollection: "test.temp_data",
  to: "test.final_data",
  stayTemp: true
})

7.2 大规模集合重命名策略

8. 故障排查与恢复

8.1 常见错误代码

错误代码原因解决方案
26命名空间不存在检查源集合名
48目标已存在使用dropTarget或先删除
73无效名称检查命名规范
13权限不足提升用户权限

8.2 操作回滚方案

// 1. 检查oplog获取操作时间点
use local
db.oplog.rs.find({op: "c", ns: "admin.$cmd"}).sort({$natural: -1}).limit(1)

// 2. 执行反向重命名
db.adminCommand({
  renameCollection: "test.new_name",
  to: "test.original_name",
  dropTarget: true
})

9. 最佳实践建议

生产环境操作清单

命名规范建议

// 好的命名
db.adminCommand({renameCollection: "analytics.user_logs", to: "analytics.user_events"})

// 不好的命名
db.adminCommand({renameCollection: "db1.col1", to: "db2.1234"})

监控指标

# 监控集合重命名操作
mongotop -n 10
mongostat --discover -n 5

10. 替代方案比较

方案优点缺点适用场景
renameCollection原子操作,保留索引需要停机中小集合
mongodump+mongorestore可选择性迁移耗时较长超大集合
应用层双写无需停机实现复杂关键业务集合

通过本文的全面介绍,您应该已经掌握了MongoDB集合重命名的所有关键知识和实践技巧。请记住在生产环境执行重命名操作前,务必进行充分测试并制定完善的回滚方案。

以上就是MongoDB集合重命名完全指南:从基础到高级实践的详细内容,更多关于MongoDB集合重命名的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文