在Mongo中,我如何漂亮地打印结果,以便.find()看起来像.findOne()


70

findOne() 产生漂亮的json对象。

find() 导致jarbled json对象。

在mongo shell中显示时,如何find()与相同findOne()


find().limit(1)
Alex

我的mongo shell在运行'find()'时不执行任何操作,没有任何错误,也没有得到结果,但是当我从python或php中提取数据时,我得到了结果...这不是很奇怪吗?
pythonian29033 '17

Answers:


154

如果您使用JavaScript编写脚本,则可以使用dcrosta的答案。但是,如果要直接在mongo交互式shell上进行漂亮的打印,则必须将pretty()附加到find()查询中。

在外壳上输入: db.yourcollection.find().pretty()


这似乎也具有保持find()的正常限制的优势。谢谢!
克里斯(Chris)

谢谢!几乎太直​​观了。我用谷歌搜索“ mongo console漂亮的输出”。谁知道这只是.pretty()
kmehta 2012年

有什么方法可以使.pretty()成为默认值?
乔纳森·杜马因

Casbah API(Scala)似乎没有.pretty或我缺少什么?
akauppi 2014年

20

通过返回游标对象find()的支持forEach(),所以你可以使用:

db.foo.find().forEach(printjson)

但是请注意,不同于默认输出find()显示前10个对象的情况,然后让您选择是否继续迭代,forEach()将迭代整个结果集。因此,如果您的查询返回许多结果,这可能会花费一些时间,并且可能不会有很大帮助。limit()是你的朋友在这里。


4
在Mongo 2.0中,这由Rohan的.pretty()答案取代。
werkshy 2011年

4

的使用已经提供了正确的答案.pretty()

但是,作为旁注,您也可以在光标上调用.toArray(),以将文档作为JSON的javascript数组获取。

db.foo.find().toArray()

3

在问这个问题时它可能不可用,但是为了使所有find()查询的默认输出都漂亮,我使用:

DBQuery.prototype._prettyShell = true

我还添加以下内容:

DBQuery.prototype.ugly = function() {
    this._prettyShell = false;
    return this;
}

这使我可以使用以下命令丑化单个find()查询的结果:

db.mycollection.find().ugly()

我通常将两个原型声明都添加到我的~/.mongorc.js文件中,因此它们在所有mongo cli shell中都可用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.