ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

都将打印出每个文档的扩展视图,而不是 find() 的 1 行版本:

默认情况下,mongo shell 只打印前 20 个文档,您可以通过在 shell 中键入 Type it 来获取下一批 20 个文档。等等。

X
Xavier Guihot
DBQuery.shellBatchSize = 300

MongoDB Docs - Configure the mongo Shell - Change the mongo Shell Batch Size


有没有办法让这种持久化?
@LukaszWiktor 是的,您可以创建一个 $HOME/.mongorc.js 文件并将该 shellBatchSize 设置放在那里。我的查询批量大小设置和 rs.slaveOk() 启用。通过命令行使用 --eval 时,它的用法也略有不同。见:docs.mongodb.com/manual/mongo/#mongorc-js-file
该链接已过时,它不包含此类信息。另外,我可以将它作为环境变量传递吗?
如果您想从命令 shell 运行它,您可以这样做:mongo --eval "DBQuery.shellBatchSize = 100; db.foo.find()"
X
Xavier Guihot

在 shell 中,您可以使用:

db.collection.find().toArray()

无需使用 it 即可显示所有文档。


这个。如果您只想将它们全部放在一个外壳中以便您可以剪切和粘贴,这就足够了。
这正是它为我所做的。说实话,我只需要一种方法来保存 Robomongo 输出的所有结果。谢谢!
太好了,它还让我将结果传递给 jq :)
Tee 结合使用可快速导出:mongo | tee ./myOutput.txt
h
halfdan

您可以在 shell 中使用 it 来迭代接下来的 20 个结果。如果您看到“有更多”,只需输入 it,您就会看到接下来的 20 项。


哦,这真的是关于如何在不使用 it 的情况下打印所有内容
谢谢halfdan,你的用户名是你的两倍!
整个想法是不使用迭代器
我投了反对票,因为这是 OP 想要避免的(这是默认行为)。
W
Wilfred Knievel

总能做到:

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

获得紧凑的视图。

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

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

这将只返回 foo 的 _id 和 name 字段。


我喜欢这种方式,因为它可以在 shell 脚本中运行(带有 --eval 的 mongo 客户端)
@ZhengKai 如果您使用的是脚本而不是在外壳中,那么 shellBatchSize 不相关,因为外壳不会为您迭代您的结果,您必须自己做。
tojson() 正是我想要从 DBQuery 转换它的东西,谢谢!
S
Sahith Vibudhi

我建议您有一个 ~/.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


s
seven

使用较新版本的 mongo shell (mongosh) 使用以下语法:

config.set("displayBatchSize", 300)

而不是折旧:

DBQuery.shellBatchSize = 300

未来的 find() 或 aggregate() 操作每次游标迭代只会返回 300 个文档。


H
Harsh Raj

在 mongo shell 中,如果返回的游标未使用 var 关键字分配给变量,则游标会自动迭代以访问最多与查询匹配的前 20 个文档。您可以设置 DBQuery.shellBatchSize 变量来更改自动迭代文档的数量。

参考 - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/


L
Lutfor Rahman
show dbs

在我的情况下使用您的数据库名称,我使用 - use smartbank 然后 - show collections - 只是为了检查文档集合名称。最后,db.您的收藏名称.find()find({}) -

show dbs

use smartbank

show collections

db.users.find() or db.users.find({}) or db.users.find({_id: ObjectId("60c8823cbe9c1c21604f642b")}) or db.users.find({}).limit(20)

您可以指定 _id:ObjectId(在此处写入文档 ID)以获取单个文档

或者您可以指定限制 - db.users.find({}).limit(20)

https://i.stack.imgur.com/KwVJE.png