首页/数据/NoSQL 速查/mongosh 打印与调试辅助
MongoDB99 条

mongosh 打印与调试辅助

print 输出纯文本、printjson 格式化打印对象、Object.keys 快速看字段结构,做临时排查很方便。

NoSQL 速查数据更新于 2026-10-13

是什么

mongosh 里打印输出有几个层次:print 输出纯文本,printjson 把 BSON 文档按缩进格式化打印,console.log 走控制台通道并对文档做检查器格式化,JSON.stringify 与 EJSON.stringify 则把文档转成可直接复制或喂给其他工具的字符串。排查问题时选对方法能省下大量翻屏时间。

基本信息

print输出字符串,对象会被转成字符串形式
printjson按缩进格式化输出文档,适合看结构
console.logmongosh 支持的标准控制台方法,可打印任意值
JSON.stringify输出标准 JSON,ObjectId 与日期会丢失类型信息
EJSON.stringify保留 ObjectId、日期等 BSON 类型,适合跨端复制

典型使用场景

  • 看字段清单:不确定文档有哪些字段时,先用 Object.keys 拿到字段名再逐项查看
  • 核对写入结果:插入或更新后打印一条文档,确认字段名与类型符合预期
  • 脚本输出结果:在 mongosh 脚本里用 print 输出处理进度与统计值
  • 跨工具传递:把查询结果用 EJSON 打印出来,粘到工单或另一个环境里仍能还原类型
  • 性能排查:先打印字段清单与文档数量,避免直接打印大文档刷屏

常用打印方式

常用打印方式
printjson(db.orders.findOne({ _id: 1001 }))              # 格式化打印一份文档
print(Object.keys(db.orders.findOne()))                    # 只看字段名,快速摸清结构
print(JSON.stringify(db.orders.findOne(), null, 2))        # 转成标准 JSON 打印
print(EJSON.stringify(db.orders.findOne()))                # 保留 ObjectId 与日期类型

const doc = db.orders.findOne({ _id: 1001 })               # 先取回再按需展开,避免整篇刷屏
print(doc.status, doc.qty, doc.createdAt)                  # 只打印关心的几个字段
config.set("inspectDepth", 3)                              # 调整检查器展开深度,默认值随版本不同

打印方法对照

方法输出形态什么时候用
print纯文本,无缩进脚本里的进度与日志
printjson带缩进的文档结构查看完整文档形态
console.log控制台格式化输出日常调试
JSON.stringify标准 JSON 字符串要粘给外部工具时
EJSON.stringify保留类型的 JSON需要还原 ObjectId 与日期时
Object.keys字段名数组先探结构再决定看什么
嵌套很深的文档在终端里会被折叠或截断显示,看到的「不完整」往往只是显示问题。要确认实际内容时用 printjson 或显式展开到具体字段,别据此判断数据缺失。
JSON.stringify 会把 ObjectId 变成带字段名与时间戳的对象、把日期变成 ISO 字符串,粘回查询条件时不能直接使用;需要保类型就用 EJSON,需要给人看就用 printjson。

易错点

  • 直接打印整个大文档:终端刷屏后前面的排查结论被淹没,先取字段清单或用投影缩小范围
  • 把 JSON.stringify 的输出当查询条件粘回去:ObjectId 与日期已变成普通对象,查询匹配不到数据
  • 在脚本里用 print 输出大对象:字符串转换开销明显,循环里逐条打印会把脚本拖慢
  • 忽略检查器的截断行为:屏幕上看不到的字段被误判为不存在,实际只是显示折叠

数据来源与参考

  • MongoDB Manual: mongosh
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌