web-dev-qa-db-ja.com

mongoシェルスクリプトで「use <database>」を含めることができない

Windows上の32ビットmongo 2.0.1 XPマシン

//script filename: test.js  (one line Shell script file to store a person)
db.cTest.save({Name: "Fred", Age:21});

次の2つのシェルコマンドを入力して、データベースdbTestに対して実行します。

    > use dbTest
    switched to dbTest
    > load("test.js")

ここまでは順調ですね。

しかし、スクリプトに "use"ステートメントを含めようとすると、失敗します。

//script filename: test.js  (including "use" statement)
use dbTest;
db.cTest.save({Name: "Fred", Age:21});

次のようにエラーmsgで失敗します。

    > load("test.js")
    SyntaxError: missing ; before statement
    Mon Dec 19 11:56:31: Error: error loading js file temp.js (Shell):1

Test.jsへのセミコロンの追加や削除は重要ではないようです。

では、mongoシェルスクリプトに「use」ディレクティブをどのように挿入するのでしょうか。

31
tpascale

http://www.mongodb.org/display/DOCS/Scripting+the+Shell

use dbname
このコマンドはスクリプトモードでは機能しません。代わりに、接続でデータベースを明示的に定義する必要があります(上記の例では/ dbname)。

または、スクリプト内で接続を作成することもできます。

db2 = connect( "server:27017/otherdbname")

19
hellectronic

Mongoスクリプトでは、db.getSiblingDB('new_db_name')を使用して、新しいデータベースの参照を取得できます。したがって、コマンドラインでデータベース名を指定する必要はありません。 script.jsを使用できます。

db = db.getSiblingDB('new_db_name');
print(db);

// the rest of your code for database "new_db_name"

このスクリプトの出力は(mongo script.jsで呼び出されます):

MongoDB Shell version: 2.2.2
connecting to: test
sag
52

"load( 'file.js')"と "mongo file.js"が実際には対話型のmongo Shellと同じスクリプトインタープリターを使用しないのは残念です。スクリプトで明示的に接続を開くことは、DRYの原則に違反している可能性があります。mongoはすでにその情報を知っているためです。ただし、ファイルをmongoにパイプするのではなく、コマンドライン:

mongo <file.js
16
Olaf Klischat