【问题标题】:MongoDB shell: reading a line from the consoleMongoDB shell:从控制台读取一行
【发布时间】:2012-07-05 04:52:53
【问题描述】:

有没有办法从 Mongo shell 中读取一行? readline() 未定义,system.stdin 也未定义。

我需要在交互模式下执行此操作,而不是向 MongoDB shell 执行的脚本提供输入。

【问题讨论】:

  • 你想用这个完成什么?
  • @Sergio 根据打印到屏幕上的输出,在一系列管理操作的中间引入人工输入。只需输入所需的信息并继续处理,而不是将操作分解为多个 JS 函数,要方便得多。
  • 嗯,很有趣。我从没想过这个用例。可能 10gen 也没有 :)
  • Mongo shell (2.0.6) 目前没有像您想象的那样提供完全可编程的解释器.. driver 实现将最适合于此。将add your suggestions 加入 Jira 队列以供考虑会很有用。

标签: javascript shell mongodb stdin readline


【解决方案1】:

根据@Stennie 的评论,目前这是不可能的。

【讨论】:

  • 还是不行?
  • 截至 2019-03-16,尚不可能。
  • 有可能。只是无证。
  • @SYOBSYOT 关心添加详细信息吗?不要让我们悬而未决
  • @Kumar,看看我下面的回答。
【解决方案2】:

正式地,这在 Mongo shell 中是不可能的。

非正式地,是的,这是可能的。您可以使用一个小技巧来读取用户输入。

Mongo shell 在许多未记录的函数中,包含一个名为passwordPrompt 的函数,可用于读取用户输入。

只是,您必须注意此 hack 的一些限制。

  1. 该函数一旦被调用,就会将字符串Enter password: 打印到控制台,并且无法更改此提示。由于此函数是原生的(非 js),因此无法重新定义它以删除提示。
  2. 此功能不会在您输入时显示您输入的内容(这是有道理的,因为 mongo shell 在内部使用它来输入用户密码)。您将不得不盲目输入。

但是,如果您不介意每次您希望获得用户输入时出现“输入密码:”提示,并且看不到您输入的内容,那么这应该可以。

这是一个例子。您可以在两种交互模式下运行它,也可以将其写入 .js 文件中:

user_input = passwordPrompt();
print("user inputed: " + user_input);

如果你运行它并输入“hacknation”,输出将是:

Enter password:

user inputed: hack nation

此外,Mongo shell 允许您从 shell 本身运行操作系统命令,这允许您使用非 mongo 和非 javascript 实用程序处理用户输入。例如,我为 mongo shell 创建了程序,它使用 windows powershell 和 .net 框架来制作图形用户界面并使用 gui 与用户交互,并将用户输入返回给 Mongo shell。我更喜欢这个而不是passwordPrompt

Mongo shell 中有很多未记录的函数,您可以使用它们来做一些更高级的事情,例如获取用户输入、文件系统 I/O 函数等。

【讨论】:

  • 这肯定适用于最新版本的 Mongo shell,并且已经过测试。我不知道它适用于所有版本的天气,如果不适用,则不适用。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 2012-03-19
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多