You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨部署环境将MongoDB整库(含多集合)批量迁移?

当然可以!不用再手动逐个处理20个集合啦,MongoDB有现成的方法能帮你一次性搞定整个库的导出和导入,我给你分两种情况详细说——一种是满足你要JSON文件的需求,另一种是更高效的原生格式方案:

一、导出整个students库为JSON文件

因为你明确要JSON格式,我们可以通过简单脚本批量遍历所有集合,用mongoexport逐个导出:

  1. 先获取students库的所有集合
    打开MongoDB Shell,连接到Server 1的实例后执行:

    use students
    show collections
    

    或者直接用命令行批量获取(适合后续脚本):

    mongo --host <Server1的IP或主机名> --port <端口号> --username <用户名> --password <密码> --eval "use students; printjson(db.getCollectionNames())"
    

    提示:如果你的MongoDB没有开启认证,可以去掉--username和--password参数

  2. 批量导出脚本
    根据你的操作系统选择对应的脚本:

    • Linux/macOS:保存为export_students.sh,给脚本加执行权限后运行
      #!/bin/bash
      DB_NAME="students"
      OUTPUT_DIR="./students_json_export"
      MONGO_HOST="<Server1的IP或主机名>"
      MONGO_PORT="<端口号>"
      MONGO_USER="<用户名>"
      MONGO_PASS="<密码>"
      
      # 创建存储JSON文件的目录
      mkdir -p $OUTPUT_DIR
      
      # 获取所有集合名称
      COLLECTIONS=$(mongo --host $MONGO_HOST --port $MONGO_PORT --username $MONGO_USER --password $MONGO_PASS --eval "use $DB_NAME; printjson(db.getCollectionNames())" | grep -E '"[^"]+"' | tr -d '",[] ')
      
      # 循环导出每个集合为JSON
      for COLLECTION in $COLLECTIONS; do
          echo "正在导出集合:$COLLECTION..."
          mongoexport --host $MONGO_HOST --port $MONGO_PORT --username $MONGO_USER --password $MONGO_PASS --db $DB_NAME --collection $COLLECTION --out "$OUTPUT_DIR/$COLLECTION.json"
      done
      
    • Windows:保存为export_students.bat,双击运行
      @echo off
      set DB_NAME=students
      set OUTPUT_DIR=.\students_json_export
      set MONGO_HOST=<Server1的IP或主机名>
      set MONGO_PORT=<端口号>
      set MONGO_USER=<用户名>
      set MONGO_PASS=<密码>
      
      :: 创建存储JSON文件的目录
      if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
      
      :: 获取所有集合名称并逐个导出
      for /f "delims=" %%i in ('mongo --host %MONGO_HOST% --port %MONGO_PORT% --username %MONGO_USER% --password %MONGO_PASS% --eval "use %DB_NAME%; printjson(db.getCollectionNames())" ^| findstr /r "\"[^\"]+\""') do (
          set "COLLECTION=%%i"
          set "COLLECTION=!COLLECTION:"=!"
          echo 正在导出集合:!COLLECTION!...
          mongoexport --host %MONGO_HOST% --port %MONGO_PORT% --username %MONGO_USER% --password %MONGO_PASS% --db %DB_NAME% --collection !COLLECTION! --out "%OUTPUT_DIR%\!COLLECTION!.json"
      )
      

    执行后,所有集合的JSON文件会存在students_json_export文件夹里。

二、批量导入JSON文件到Student2库

把导出的文件夹复制到远程桌面机器后,同样用脚本批量导入:

  1. Linux/macOS导入脚本:保存为import_student2.sh,加执行权限后运行

    #!/bin/bash
    TARGET_DB="Student2"
    INPUT_DIR="./students_json_export"
    MONGO_HOST="<远程桌面的IP或主机名>"
    MONGO_PORT="<端口号>"
    MONGO_USER="<用户名>"
    MONGO_PASS="<密码>"
    
    # 循环导入每个JSON文件
    for FILE in $INPUT_DIR/*.json; do
        # 从文件名提取集合名称(去掉.json后缀)
        COLLECTION=$(basename "$FILE" .json)
        echo "正在导入集合:$COLLECTION 到 $TARGET_DB..."
        mongoimport --host $MONGO_HOST --port $MONGO_PORT --username $MONGO_USER --password $MONGO_PASS --db $TARGET_DB --collection $COLLECTION --file "$FILE" --jsonArray
    done
    
  2. Windows导入脚本:保存为import_student2.bat,双击运行

    @echo off
    set TARGET_DB=Student2
    set INPUT_DIR=.\students_json_export
    set MONGO_HOST="<远程桌面的IP或主机名>"
    set MONGO_PORT="<端口号>"
    set MONGO_USER="<用户名>"
    set MONGO_PASS="<密码>"
    
    :: 循环导入每个JSON文件
    for %%f in ("%INPUT_DIR%\*.json") do (
        set "COLLECTION=%%~nf"
        echo 正在导入集合:!COLLECTION! 到 %TARGET_DB%...
        mongoimport --host %MONGO_HOST% --port %MONGO_PORT% --username %MONGO_USER% --password %MONGO_PASS% --db %TARGET_DB% --collection !COLLECTION! --file "%%f" --jsonArray
    )
    

    提示:如果你的JSON文件是每行一个文档(而非数组格式),可以去掉--jsonArray参数

三、更高效的替代方案(推荐)

如果对文件格式没有严格要求,推荐用MongoDB原生的mongodump和mongorestore工具,它们处理BSON格式,速度更快,还能保留索引、权限等元数据,操作更简单:

  1. 导出整个students库(在Server 1上执行):

    mongodump --host <Server1的IP> --port <端口> --username <用户名> --password <密码> --db students --out ./students_dump
    
  2. 导入到Student2库(在远程桌面机器上执行,先把students_dump文件夹复制过来):

    mongorestore --host <远程桌面IP> --port <端口> --username <用户名> --password <密码> --db Student2 ./students_dump/students
    

注意事项

  • 操作时确保两端MongoDB服务正常运行,网络连接通畅(远程连接时)。
  • 替换脚本中的<占位符>为你的实际信息,比如IP、端口、用户名等。
  • 如果是本地实例且无认证,直接去掉脚本中的--username和--password参数即可。

内容的提问来源于stack exchange,提问作者Bimlendu Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:36:57