如何在 MongoDB shell 中打印出 20 多个项目(文档)?
Posted
技术标签:
【中文标题】如何在 MongoDB shell 中打印出 20 多个项目(文档)?【英文标题】:How to print out more than 20 items (documents) in MongoDB's shell? 【发布时间】:2011-04-11 22:55:45 【问题描述】:db.foo.find().limit(300)
不会这样做。它仍然只打印出 20 个文档。
db.foo.find().toArray()
db.foo.find().forEach(printjson)
都将打印出每个文档的扩展视图,而不是 find()
的 1 行版本:
【问题讨论】:
默认情况下 mongo shell 只打印前 20 个文档,您可以通过在 shell 中键入Type it
来获取下一批 20 个文档。以此类推。
【参考方案1】:
您可以在 shell 内部使用 it
来迭代接下来的 20 个结果。如果您看到“有更多”,只需输入 it
,您就会看到接下来的 20 项。
【讨论】:
哦,这真的是关于如何在不使用it
的情况下打印所有内容@
谢谢halfdan,你的用户名是你的两倍!
整个想法是不要使用迭代器
我投了反对票,因为这是 OP 想要避免的(这是默认行为)。【参考方案2】:
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 链接已过时,不包含此类信息。另外,我可以将它作为环境变量传递吗? 如果你想从命令行运行它,你可以这样做:mongo --eval "DBQuery.shellBatchSize = 100; db.foo.find()"
【参考方案3】:
从你可以使用的外壳:
db.collection.find().toArray()
无需使用it
即可显示所有文档。
【讨论】:
这个。如果您只想将它们全部放在一个外壳中以便您可以剪切和粘贴,这就足够了。 这正是为我所做的。说实话,我只需要一种方法来保存 Robomongo 输出的所有结果。谢谢! 太好了,它也让我把结果传给 jq :) 与 Tee 结合使用可快速导出:mongo | tee ./myOutput.txt
【参考方案4】:
总是可以的:
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 如果您使用的是脚本而不是在 shell 中,那么 shellBatchSize 不相关,因为 shell 不会为您迭代结果,您必须自己完成.
tojson() 正是我想要从 DBQuery 转换它的东西,谢谢!【参考方案5】:
在 mongo shell 中,如果返回的游标未使用 var 关键字分配给变量,则游标会自动迭代以访问与查询匹配的前 20 个文档。您可以设置 DBQuery.shellBatchSize 变量来更改自动迭代文档的数量。
参考 - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/
【讨论】:
【参考方案6】:我建议你有一个~/.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
【讨论】:
【参考方案7】: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)
【讨论】:
【参考方案8】:使用较新版本的 mongo shell (mongosh) 使用以下语法:
config.set("displayBatchSize", 300)
而不是折旧:
DBQuery.shellBatchSize = 300
未来的 find() 或 aggregate() 操作每次游标迭代只会返回 300 个文档。
【讨论】:
以上是关于如何在 MongoDB shell 中打印出 20 多个项目(文档)?的主要内容,如果未能解决你的问题,请参考以下文章
查找并打印出字符串中特定字符的出现次数 (shell/AIX)
linux shell脚本中如何统计某一行中某字符出现的个数
bash shell脚本,如何用sed 命令打印出匹配行和匹配行的第N行