web-dev-qa-db-ja.com

Mongo Shellはファイルからクエリを実行し、結果を表示します

Mongoシェルを使用して外部ファイルを実行し、コンソールで結果を確認する方法は?

query.jsなどの外部ファイルがあり、それを実行してcmdで結果を確認したいと思います。

たとえば、ファイルの内容は次のとおりです。

db.users.find()
25
Andrei

これをquery.jsファイル:

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

そして実行:

mongo db_name query.js

ここに 良い説明 があります。

38
alecxe

ファイルからmongodbクエリを実行し、コンソールに出力を表示する最も簡単な方法は次のとおりです。

query.js

use my_db;
db.my_collection.findOne()

コマンドラインで:mongo <query.js

これにより、mongoシェルで個別にクエリを実行しているかのように、すべての出力がコンソールに表示されます。

14
Nelu

ここで良い情報-mongoはprintjson()関数を提供しているので、printjson()が提供する機能よりも多くの機能が必要でない限り、独自に記述する必要はありません。

Mongoファイルの例(test.js)

_// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)
_

コマンド

_mongo < test.js
_

Mongoファイルから_use test_を省略したい場合、おそらくIDE jsファイルのエラー表示を削除するために)、コマンドラインでターゲットdbを指定できます。

_mongo test < test.js
_

興味深いことに、上記の例ではリダイレクトを使用して、ファイルをmongoシェルにプッシュします。この呼び出し規約により、シェルで行うのと同じようにコマンドを入力できます。 _use test_のようなmongoシェルの便利なコマンドを含みます。

Mongoには、別のスクリプト呼び出し規則があります:_mongo test test.js_は、リダイレクト演算子を省略します。この呼び出し規約では、_test.js_が適切なJavaScriptである必要があり、_use test_のようなmongoシェルの便利なメソッドを使用できません。 getSiblingDB()のようなJavaScriptに相当するものを使用します。

4
Steve Tarver

これはmongo cliのある時点で変更されたようです。データベースに対してファイルを実行するには、次のコマンドを実行する必要がありました(mongo cliバージョン3.4.9を使用)

mongo mongodb://192.168.1.1/YourDataBase scriptFile.js

次に、192.168.1.1はデータベースのIP /ホスト名、YourDataBaseはデータベース名で、既存のファイルを指します

1
nover

他の回答が言及しなかったことの1つは、use dbコマンドが外部スクリプトで機能しないことです。最良の方法は、getSiblingDBを使用することです。たとえば、my_dbというデータベースを使用する場合:

db = db.getSiblingDB("my_db");

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

その後、すべてが期待どおりに機能します。 mongoシェルのスクリプトの作成 を参照してください。

1
laike9m