2012-01-05 21 views
1

私はmongodbデータベース文書にいくつかのIDを持っています。私はスクリプトを使ってこれらのIDにインデックスを作成して、ensureIndexコマンドを何度も実行する必要がないようにする必要があります。mongodbシェルからmongodbクエリを持つスクリプトを実行する

db.getCollection("elements").ensureIndex({customerId:1}); 
db.getCollection("elements").ensureIndex({userId:1}); 
........ 

私はこれらのコマンドをすべて含むスクリプトを実行するだけで済みます。どのようにmongodbシェルからスクリプトを実行するか考えていますか?また、スクリプトの拡張は何ですか?

ジュヒ。

+0

もう一度実行しますか、それとも何ですか? –

+1

あなたは役に立つ回答を受け入れるべきです。 –

答えて

12

javacriptファイル(拡張子は.js)にコマンドを入力し、mongoコンソールユーティリティを使用して実行することができます。 create_indexes.jsファイルは、コマンドが含まれています

mongo --host my_host --port my_port my_db create_indexes.js 

:このよう

db.getCollection("elements").ensureIndex({customerId:1}); 
db.getCollection("elements").ensureIndex({userId:1}); 
.... 
+0

ええ、またいくつかのポインタを見てみましょう:http://www.mongodb.org/display/DOCS/Scripting+the+shell –

+0

私のためにうまく動作します.. :) BTW .. Sharded環境ですか?私が実行しているシャードに反映されるか、私のシャード上で別々に.jsを実行する必要がありますか? – juhi

+0

'mongos'に対して実行すると、すべてのシャード上で実行されます。 –

8

また、MongoDBのシェルからスクリプトを実行することができます。私は関数に関数を追加して呼び出すのが好きなのが好きです。

var ensureIndexes = function() { 
    db.getCollection("elements").ensureIndex({customerId:1}); 
    db.getCollection("elements").ensureIndex({userId:1}); ........ 
} 

保存ensureIndexes.jsという名前のファイルに上記、その後のmongoシェルから次のように入力します:このようなスクリプトを作成します

load('ensureIndexes.js') 

今、あなたがその機能を呼び出すためにensureIndexes()を入力することができるようになります。私はそのようなユーティリティ関数を含むスクリプトをたくさん持っています。

+0

これは、mongodbシェルによって提供されるjs関数以外の私たちのカスタム関数を保証する素晴らしいトリックです。:) BTW ... Sharded環境でうまく動作しますか?私が実行しているシャードに反映されるか、私のシャード上で別々に.jsを実行する必要がありますか? – juhi

+1

@juhiはい、あなたはそれを行うことができます。このページを参照してください:http://www.mongodb.org/display/DOCS/Server-side+Code+Execution特にスクリプトのサーバーサイドを保存するセクション。どこでも実行できます。 – dlaidlaw

+0

このヒントを本当に気に入りましたか?ありがとう! – the0ther

4

OSなどのUNIXを使用している場合は、役立つ可能性があります。

私はUNIXシェルを使用してリダイレクトを行いました。

だから、UNIXのコマンドラインから次のように入力します。あなたのコマンドを述べることができるyour_script.jsインサイド

mongo < your_script.js 

を。

関連する問題