MongoDB中使用cursor打印对象异常:printjson输出[object Object]
MongoDB中printjson打印文档显示[object Object]的问题
我创建了如下简单集合:
use('biblioteca') db.inventory.insertOne({ libro: 'El principe de la niebla', autor: 'Carlos Ruiz Zafon', precio: 20, paginas: 240, lanzamiento: 1991, editorial: 'Planeta' })
执行以下代码可正常显示autor字段:
var cursorArray = db.inventory.find({}).toArray() print(cursorArray[0].autor)
但尝试用printjson(cursorArray[0])打印文档时,结果显示为[object Object]。这不应该以JSON格式显示文档吗?我哪里理解有误?
原因与解决方法
出现[object Object]是因为你大概率在非MongoDB Shell(mongosh)环境中执行了代码——printjson是mongosh专属的内置函数,仅在该环境下能正确格式化BSON文档为可读的JSON输出。在Node.js或其他普通JS运行环境中,printjson并不存在,JS引擎会默认将其当作普通print函数处理,直接打印对象就会输出[object Object]。
如果是在mongosh中运行,printjson会正常输出格式化后的文档。如果是在外部环境,对应解决方式:
- Node.js环境:使用
console.log(JSON.stringify(cursorArray[0], null, 2)),第二个和第三个参数可以生成带缩进的美观格式; - 若使用MongoDB Node.js驱动,还可以用
EJSON.stringify()处理BSON类型(比如ObjectId、Date)的序列化,避免普通JSON.stringify丢失或错误转换特殊类型:const { EJSON } = require('mongodb'); console.log(EJSON.stringify(cursorArray[0], null, 2));
如果确实是在mongosh中遇到这个问题,建议重启shell或升级到最新版mongosh排查异常。
内容的提问来源于stack exchange,提问作者Joncarre
相关产品推荐
相关产品推荐

