navicat的“导出为json”实际调用mongodump生成.bson二进制文件,并非标准json;需手动配置外部mongoexport工具并勾选“export as json”,配合正确参数(如--jsonarray)才能生成可读、可解析、可被mongoimport直接消费的json文件。
navicat 本身不支持对 mongodb 等非关系型数据库“原生导出为标准 json 文件”——它界面上的“导出为 json”选项实际调用的是 mongodump,输出的是二进制 .bson 文件,不是可读、可解析、可被 mongoimport 直接消费的 json。
为什么 Navicat 的“导出为 JSON”在 MongoDB 里导出的是乱码?
因为 Navicat 16 对 MongoDB 的导出向导底层绑定的是 mongodump 工具,而非 mongoexport。即使你勾选了“导出为 JSON”,它仍会生成两个文件:collection.bson(二进制)和 collection.metadata.json(结构描述)。前者用文本编辑器打开就是乱码,mongoimport --type json 会直接报错 invalid JSON。
这不是配置错误,是设计如此——UI 上写的“JSON”只是误导性标签。
必须用 mongoexport 才能得到真正可用的 JSON
要导出能被程序直接读取、浏览器能打开、mongoimport 能原样导入的 JSON,唯一可靠路径是手动配置外部工具 mongoexport:
- 去 MongoDB 官网下载 Database Tools(注意选对应系统版本,如 Windows x64 或 macOS ARM64)
- 解压后找到
mongoexport可执行文件,记下**绝对路径**,例如:/opt/mongodb-database-tools/bin/mongoexport(Linux/macOS)或C:\mongodb-database-tools\bin\mongoexport.exe(Windows) - 在 Navicat 中:右键目标集合 → MongoExport → 点击设置图标 → 填入上面的
mongoexport路径 - 再次右键该集合 → MongoExport → 弹窗中务必勾选
Export as JSON(不是 BSON),并确认输出路径以.json结尾
mongoexport 导出失败的三个高频原因
即使路径配对了,也常静默失败或生成空文件。关键看参数是否匹配数据形态:
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 不加
--jsonArray:默认每行一个文档(line-delimited JSON),适合流式处理;mongoimport --file xxx.json可直入 - 加了
--jsonArray:输出[{},{},{}]形式数组,此时mongoimport必须同步加--jsonArray,否则显示0 documents imported - 导出字段含中文或特殊字符时,Windows 下需在 PowerShell 脚本里显式指定
--encoding UTF8,否则 JSON 文件头部可能带 BOM 或乱码,导致解析失败 - 如果集合名含短横线(
-)或数字开头,mongoexport会报错 unrecognized argument;解决方法是用单引号包裹集合名:--collection 'my-collection'
导出大集合时 JSON 文件打不开?别硬扛
Navicat + mongoexport 不做分块、不压缩、不流式写入。10 万文档轻松生成 300MB+ 单文件,fs.readFile 内存溢出、JSON.parse 报 Unexpected token 是常态。
更务实的做法是跳过 Navicat 中间层,直接在终端跑:
mongoexport --host localhost:27017 --db mydb --collection users --jsonArray --limit 10000 > users_part1.json
配合 --skip 和循环脚本分片导出,再用 Node.js 或 Python 合并——这比依赖 UI 更可控,也避开了 Navicat 对超长命令行或大缓冲区的截断问题。
真正容易被忽略的点是:Navicat 的 MongoExport 设置只保存在当前连接配置里,换一台机器、重装 Navicat 或升级版本后,这个路径要重新填;它不会自动继承、也不进配置文件同步。










