9

Mongoシェルから行を読み取る方法はありますか?readline()は定義されておらず、どちらも定義されていませんsystem.stdin

MongoDBシェルによって実行されるスクリプトに入力を供給するのではなく、インタラクティブモードでこれを行う必要があります。

4

2 に答える 2

7

@Stennieのコメントによると、これは現在不可能です。

于 2012-07-08T23:58:18.843 に答える
3

公式には、これはMongoシェルでは不可能です。

非公式に、はい、それは可能です。ユーザー入力を読み取るために使用できる小さなハックが1つあります。

passwordPrompt文書化されていない多くの関数の中でMongoシェルには、ユーザー入力の読み取りに使用できるという名前の関数が1つ含まれています。

ただ、このハックには注意しなければならないいくつかの制限があります。

  1. この関数は、一度呼び出されると、文字列Enter password:をコンソールに出力し、このプロンプトを変更するオプションはありません。この関数はネイティブ(js以外)であるため、プロンプトを削除するために再定義することはできません。
  2. この関数は、入力時に入力内容を表示しません(mongoシェルはユーザーパスワードの入力に内部的に使用するため、意味があります)。入力を盲目的に入力する必要があります。

ただし、ユーザー入力を取得するたびに「パスワードの入力:」プロンプトが表示され、入力内容が表示されなくてもかまわない場合は、これでうまくいくはずです。

これが一例です。インタラクティブモードで実行することも、.jsファイル内に書き込むこともできます。

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

それを実行して「hacknation」と入力すると、これからの出力は次のようになります。

Enter password:

user inputed: hack nation

また、Mongoシェルを使用すると、シェル自体からOSコマンドを実行できます。これにより、mongoおよびjavascript以外のユーティリティを使用してユーザー入力を処理できます。たとえば、Windows PowerShellと.netFrameworkを使用してグラフィックユーザーインターフェイスを作成し、GUIを使用してユーザーと対話し、ユーザー入力をMongoシェルに戻すmongoシェル用のプログラムを作成しました。私はこれよりも好きpasswordPromptです。

Mongoシェルには、ユーザー入力の取得、ファイルシステムのI / O関数など、より高度な処理を実行するために使用できる、文書化されていない関数がかなりあります。

于 2019-06-25T06:25:05.187 に答える