MongoDB中findOne为何不支持pretty()?空集合查询返回差异原因是什么
MongoDB查询相关行为问题解答
1. db.collection.findOne().pretty()无法执行的底层原因
db.collection.find()返回的是游标(Cursor)类型对象,pretty()是Cursor类提供的内置方法,作用是在迭代游标输出文档时自动添加缩进、换行实现格式化排版,因此链式调用合法。db.collection.findOne()执行后直接返回单个BSON文档对象(在Mongo Shell中对应普通JavaScript对象类型),而非游标对象,该对象的原型链上不存在pretty()方法,强行调用会抛出类型错误。- 所谓“findOne返回结果本身已是格式化状态”,是因为Mongo Shell默认输出单个对象时会自动做缩进排版,无需额外调用格式化方法。
2. 空集合下find()与findOne()返回值差异的原因
- 空集合执行
db.collection.find()时,返回的游标对象内部没有匹配的文档元素,Mongo Shell默认迭代游标输出内容时,没有可打印的元素就不会输出任何内容。 findOne()的方法定义本身约定:匹配不到任何文档时直接返回null值,因此空集合调用该方法时,Shell会把返回的null值直接打印出来,就形成了可见的返回差异。
内容的提问来源于stack exchange,提问作者Stunner
相关产品推荐
相关产品推荐

