是什么
mongosh 里打印输出有几个层次:print 输出纯文本,printjson 把 BSON 文档按缩进格式化打印,console.log 走控制台通道并对文档做检查器格式化,JSON.stringify 与 EJSON.stringify 则把文档转成可直接复制或喂给其他工具的字符串。排查问题时选对方法能省下大量翻屏时间。
基本信息
| 输出字符串,对象会被转成字符串形式 | |
| printjson | 按缩进格式化输出文档,适合看结构 |
| console.log | mongosh 支持的标准控制台方法,可打印任意值 |
| 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) # 调整检查器展开深度,默认值随版本不同打印方法对照
| 方法 | 输出形态 | 什么时候用 |
|---|---|---|
| 纯文本,无缩进 | 脚本里的进度与日志 | |
| printjson | 带缩进的文档结构 | 查看完整文档形态 |
| console.log | 控制台格式化输出 | 日常调试 |
| JSON.stringify | 标准 JSON 字符串 | 要粘给外部工具时 |
| EJSON.stringify | 保留类型的 JSON | 需要还原 ObjectId 与日期时 |
| Object.keys | 字段名数组 | 先探结构再决定看什么 |
嵌套很深的文档在终端里会被折叠或截断显示,看到的「不完整」往往只是显示问题。要确认实际内容时用 printjson 或显式展开到具体字段,别据此判断数据缺失。
JSON.stringify 会把 ObjectId 变成带字段名与时间戳的对象、把日期变成 ISO 字符串,粘回查询条件时不能直接使用;需要保类型就用 EJSON,需要给人看就用 printjson。