9

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

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

4

2 回答 2

7

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

于 2012-07-08T23:58:18.843 回答
3

正式地,这在 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 函数等。

于 2019-06-25T06:25:05.187 回答