如何在MongoDB的外壳中打印出20多个项目(文档)?


253
db.foo.find().limit(300)

不会的 它仍然只打印20个文档。

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

都将打印出每个文档的扩展视图,而不是用于以下内容的1行版本find()


默认情况下,mongo shell仅打印前20个文档,您可以通过键入Type itShell 获得下一批20个文档。等等。
roottraveller

Answers:


381

1
有没有办法使之持久?
卢卡斯·威克多

7
@LukaszWiktor是的,您可以创建一个$ HOME / .mongorc.js文件,并将该shellBatchSize设置放入其中。我的具有查询批处理大小设置并启用了rs.slaveOk()。通过命令行使用--eval时,它的用法也略有不同。参见:docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart 2016年

1
那很棒!感谢@matiaselgart
Lukasz Wiktor

链接已过期,不包含此类信息。另外,我可以将其作为环境变量传递吗?
phil294

157

如果要显示所有结果,可以从外壳程序db.collection.find().toArray()中获取所有结果,而无需它。


这个。如果您只想将它​​们全部放在外壳中以便剪切和粘贴,就足够了。
superluminary

这个更有用
anwerj

这正是为我做的。说实话,我只需要一种方法来保存Robomongo输出的所有结果。谢谢!
安德烈斯·波特罗

太好了,它也让我将结果传送到jq :)
Omer van Kloeten

完美的解决方案!伙计,这非常有用。
coderpc

93

您可以it在外壳内部使用该方法来迭代接下来的20个结果。只需键入,it如果您看到“还有更多”,您将看到接下来的20个项目。


35
哦,这真的是关于如何不使用打印全部内容it
nonopolarity

15
谢谢Halfdan,您的用户名是您的两倍!
cassi.lup 2013年

6
整个想法不是使用迭代器
Amir Kost

2
我拒绝投票是因为这是OP想要避免的(这是默认行为)。
手工艺者

41

可以总是这样做:

db.foo.find().forEach(function(f){print(tojson(f, '', true));});

要获得该紧凑视图。

此外,我发现限制查找返回的字段非常有用,因此:

db.foo.find({},{name:1}).forEach(function(f){print(tojson(f, '', true));});

它将仅从foo返回_id和name字段。


1
我喜欢这样,因为它可以在shell脚本(带有mongo的客户端--eval)中运行
Zheng Kai

1
@ZhengKai如果您使用的是脚本而不是在Shell中,则shellBatchSize无关紧要,因为您的结果不会被Shell迭代,您必须自己做。
Asya Kamsky

tojson()正是我想要将其从DBQuery转换的东西,谢谢!
Mark Pieszak-Trilon.io,2015年

4

我建议您有一个~/.mongorc.js文件,这样就不必每次都设置默认大小。

 # execute in your terminal
 touch ~/.mongorc.js
 echo 'DBQuery.shellBatchSize = 100;' > ~/.mongorc.js
 # add one more line to always prettyprint the ouput
 echo 'DBQuery.prototype._prettyShell = true; ' >> ~/.mongorc.js

要了解有关您还可以做什么的更多信息,建议您看一下这篇文章:http : //mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


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.