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」ディレクティブをどのように挿入するのでしょうか。
http://www.mongodb.org/display/DOCS/Scripting+the+Shell
use dbname
このコマンドはスクリプトモードでは機能しません。代わりに、接続でデータベースを明示的に定義する必要があります(上記の例では/ dbname)。または、スクリプト内で接続を作成することもできます。
db2 = connect( "server:27017/otherdbname")
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
"load( 'file.js')"と "mongo file.js"が実際には対話型のmongo Shellと同じスクリプトインタープリターを使用しないのは残念です。スクリプトで明示的に接続を開くことは、DRYの原則に違反している可能性があります。mongoはすでにその情報を知っているためです。ただし、ファイルをmongoにパイプするのではなく、コマンドライン:
mongo <file.js