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

如何在MongoShell中使用MongoDump?M10集群迁移免费集群报错解决

解决方案汇总

报错根因与修复方法

mongodump 是MongoDB官方提供的独立命令行工具,不属于MongoSH的内置操作指令。MongoDB Compass内置的MongoSH仅支持MongoDB操作语法、JavaScript语句,无法识别系统级命令行工具的参数,因此会抛出「Unexpected token, expected ";"」语法错误。

修复步骤如下:

  • 本地提前安装MongoDB Database Tools工具包,确认包含mongodump、mongorestore两个命令
  • 打开本地操作系统终端(Windows为CMD/PowerShell,macOS/Linux为系统终端),在终端中执行相关备份恢复命令,而非在Compass的MongoSH中执行
  • 旧集群数据备份命令示例:
    mongodump --uri "mongodb+srv://<用户名>:<密码>@<旧M10集群连接地址>/<可选指定单个数据库名>" -o ./mongodb_backup
  • 新集群数据恢复命令示例:
    mongorestore --uri "mongodb+srv://<用户名>:<密码>@<新免费集群连接地址>/" ./mongodb_backup

其他可用迁移方案

如果不想安装命令行工具,也可以选择以下更简便的方案:

方案1:Compass图形化导出导入(适合绝大多数场景)

  • 用Compass连接旧M10集群,进入目标数据库,在集合页面右上角点击「导出数据」,选择BSON格式(可保留完整数据类型)导出到本地
  • 断开旧集群连接,连接新的免费集群,创建同名数据库后进入集合页面,点击「导入数据」选择之前导出的文件即可完成迁移

方案2:MongoSH直接迁移(适合小数据量场景)

如果单库数据量小于100MB,可以直接在MongoSH中执行脚本完成迁移,无需导出本地文件:

// 建立旧集群连接
const oldCluster = Mongo("mongodb+srv://<用户名>:<密码>@<旧集群地址>");
const oldDb = oldCluster.getDB("<目标数据库名>");
// 建立新集群连接
const newCluster = Mongo("mongodb+srv://<用户名>:<密码>@<新集群地址>");
const newDb = newCluster.getDB("<目标数据库名>");

// 批量迁移所有集合
oldDb.getCollectionNames().forEach(collectionName => {
  const allDocs = oldDb.getCollection(collectionName).find().toArray();
  if (allDocs.length > 0) {
    newDb.getCollection(collectionName).insertMany(allDocs);
  }
});

注意:数据量超过100MB时不推荐该方案,容易出现连接超时、内存溢出问题

内容的提问来源于stack exchange,提问作者julz oh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:27:03