【问题标题】:How to print out more than 20 items (documents) in MongoDB's shell?如何在 MongoDB shell 中打印出 20 多个项目(文档)?
【发布时间】: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 个文档。以此类推。

标签: mongodb


【解决方案1】:

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

【讨论】:

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

【讨论】:

  • 有没有办法让它持久化?
  • @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 个文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-25
          • 2015-08-07
          • 1970-01-01
          • 2014-10-27
          相关资源
          最近更新 更多