MongoDB shell:从控制台读取一行

Sim*_*Sim 8 javascript shell stdin readline mongodb

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

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

Sim*_*Sim 7

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


SYO*_*YOT 5

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

非官方的说法是,是的,这是可能的。您可以使用一种小技巧来读取用户输入。

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

只是,您必须注意此技巧有一些限制。

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

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

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

user_input = passwordPrompt();
print("user inputed: " + user_input);
Run Code Online (Sandbox Code Playgroud)

如果运行它并输入“hack nation”,输出将是:

Enter password:

user inputed: hack nation
Run Code Online (Sandbox Code Playgroud)

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

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