MongoDB shell:从控制台读取一行

时间:2012-07-04 17:19:51

标签: javascript shell mongodb stdin readline

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

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

2 个答案:

答案 0 :(得分:7)

Per @ Stennie的评论,现在不可能。

答案 1 :(得分:1)

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

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

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

仅此一点,您必须了解此hack。

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

但是,如果您不希望每次希望获得用户输入时都出现“ Enter password:”提示,但看不到您键入的内容,则应该可以。

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

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

如果运行它并输入“ hack country”,则输出为:

Enter password:

user inputed: hack nation

此外,Mongo shell允许您从shell本身运行OS命令,这使您可以使用non-mongo和non-javascript实用程序处理用户输入。例如,我为mongo shell创建了程序,这些程序使用Windows powershell和.net框架制作图形用户界面并使用gui与用户交互,然后将用户输入返回到Mongo shell。我更喜欢passwordPrompt

Mongo shell中有许多未记录的功能,您可以用来做一些更高级的事情,例如获取用户输入,文件系统I / O功能等。