【问题标题】:MongoDB shell: printing to console without a trailing newline?MongoDB shell:在没有尾随换行符的情况下打印到控制台?
【发布时间】:2012-07-05 09:10:05
【问题描述】:

有没有办法从 Mongo shell 中写入 STDOUT 而没有尾随换行符?除了print(),我似乎找不到任何可用的东西。

【问题讨论】:

  • mongo shell 在 2.0.6 中没有 print() 的替代输出,但您可以 suggest this as an improvement。这样做的用例是什么?
  • 在您对“reading a line from the console”的相关问题的上下文中有意义。目前最好使用MongoDB drivers 之一完成您所追求的那种交互。
  • 确实如此。我可能只需要通过 Rails 控制台执行此操作。但是,Ruby 驱动程序在处理超时方面落后了。我发现 Mongo shell 在处理长时间运行的查询时更加可靠。
  • @Stennie 我刚刚遇到的一个用例是希望在某事完成时喷出一段时间(类似于进度条)。我不想打印一整行。我正处于开发阶段,并希望密切关注我能走多远。我知道我必须改用其中一个驱动程序。最后我会选择“xxx out of yyy completed”。

标签: javascript shell mongodb stdout


【解决方案1】:

这与我在reading a line from the console 上的 SO 问题有关。根据@Stennie 的评论,在当前 (2.0.6) 版本的 Mongo shell 中是不可能的。

【讨论】:

    【解决方案2】:

    可能有一些方法可以解决它。您可以将结果累积在一个中间变量(可以是数组、字符串或任何其他数据结构)中,然后在一行中打印整个内容。下面的示例说明了使用数组从查询结果中捕获值,然后将数组转换为以逗号作为分隔符的字符串。就我而言,我只对 _id 字段感兴趣:

    var cursor = db.getCollection('<collection name>').find(<your query goes here>)
    let values = []
    cursor.forEach((doc) => values.push(doc._id))
    print(values.join(','))
    
    

    根据您期望的结果数量,不确定中间数据结构消耗的空间是否会压倒内存。如果是这种情况,则可以制作查询以返回较小的数据子集,这些数据子集在相加时构成您想要的完整结果集。

    【讨论】:

      【解决方案3】:

      这是一个很老的问题,但仍然相关,所以回答一下。

      可以使用 printjsononeline()。

      【讨论】:

      • 函数 printjsononeline(str) 似乎具有从返回的 JSON 文档中删除中间空格的效果,但不会抑制在打印后将终端推进一行的行为 - 即删除尾随换行符。我相信后者是问题所在。
      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多