在Mongo中,如何在执行.find()时显示结果与执行.findOne()相同

TIM*_*MEX 69 database mongodb

findOne() 导致漂亮的json对象.

find() 导致破碎的json对象.

我怎样才能让find()一样findOne(),当谈到在蒙戈外壳显示?

Roh*_*han 150

如果您使用javascript编写脚本,则可以使用dcrosta的答案.但是如果你想直接在mongo交互式shell上打印,你必须在你的find()查询中附加pretty().

在shell上键入: db.yourcollection.find().pretty()

  • 有什么方法可以使 .pretty() 成为默认值吗? (2认同)

dcr*_*sta 19

find()支持返回的游标对象forEach(),因此您可以使用:

db.foo.find().forEach(printjson)
Run Code Online (Sandbox Code Playgroud)

但请注意,与默认输出find()显示前10个对象不同,然后让您选择是否继续迭代,forEach()将迭代整个结果集.因此,如果您的查询返回许多结果,这可能需要一段时间,可能不会非常有用.limit()是你的朋友.

  • 在Mongo 2.0中,这是由Rohan的.pretty()回答取代的. (4认同)

Dav*_*aub 6

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

DBQuery.prototype._prettyShell = true
Run Code Online (Sandbox Code Playgroud)

我还添加以下内容:

DBQuery.prototype.ugly = function() {
    this._prettyShell = false;
    return this;
}
Run Code Online (Sandbox Code Playgroud)

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

db.mycollection.find().ugly()
Run Code Online (Sandbox Code Playgroud)

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


Rah*_*mar 5

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

不过,顺便说一句,您还可以在光标上调用 .toArray() 来获取 JSON javascript 数组形式的文档。

db.foo.find().toArray()
Run Code Online (Sandbox Code Playgroud)