警告
次のドキュメントは、mongo MongoDB Server のダウンロード に含まれる シェルに関連しています。新しいMongoDB Shell(mongosh )の詳細については、 mongoshドキュメント を参照してください。
2 つの shell の違いを理解するには、「 mongo Shell とmongoshの比較 」を参照してください。
mongo shell のスクリプトは、MongoDB のデータを操作や管理操作を実行する JavaScript で記述できます。
このチュートリアルでは、 mongo shell を使用して MongoDB にアクセスする JavaScript の記述方法を紹介します。
新しい接続の開始
mongo shell または JavaScript ファイルから、 Mongo()コンストラクタを使用してデータベース接続をインスタンス化できます。
new Mongo() new Mongo(<host>) new Mongo(<host:port>)
デフォルト ポートの localhost で実行中の MongoDB インスタンスへの新しい接続をインスタンス化し、 getDB()メソッドを使用してグローバルdb変数をmyDatabaseに設定する次の例えを考えてみます。
conn = new Mongo(); db = conn.getDB("myDatabase");
アクセス制御を適用する MongoDB インスタンスに接続する場合は、 db.auth()メソッドを使用して認証できます。
さらに、 connect()メソッドを使用して MongoDB インスタンスに接続できます。 次の例では、デフォルト以外のポート27020を使用してlocalhostで実行されている MongoDB インスタンスに接続し、グローバルdb変数を設定します。
db = connect("localhost:27020/myDatabase");
Tip
インタラクティブとスクリプト化の違い mongo
注意
バージョン4.2以降、 mongo shell は メソッドisInteractive()を提供し、 mongo shell が対話モードまたはスクリプト モードのどちらで実行されているかを示すブール値を返します。
mongo shell のスクリプトを作成する場合は、次の点を考慮してください。
dbグローバル変数を設定するには、getDB()メソッドまたはconnect()メソッドを使用します。 データベース参照は、db以外の変数に割り当てることができます。mongoshell での書込み操作では、デフォルトで{ w: 1 }の書込み保証が使用されます。 一括操作を実行する場合は、Bulk()メソッドを使用します。シェルshell (例: JavaScript ファイル内の
use <dbname>、show dbsなど)は、有効な JavaScript ではないためです。次の表は、最も一般的な
mongoshellヘルパーをJavaScriptにマッピングします。shellヘルパーJavaScript と同等show dbs,show databasesdb.adminCommand('listDatabases') use <db> db = db.getSiblingDB('<db>') show collections db.getCollectionNames() show users db.getUsers() show roles db.getRoles({showBuiltinRoles: true}) show log <logname> db.adminCommand({ 'getLog' : '<logname>' }) show logs db.adminCommand({ 'getLog' : '*' }) it cursor = db.collection.find() if ( cursor.hasNext() ){ cursor.next(); } 対話モードでは、
mongoshell はすべてのカーソルの内容を含む操作の結果を出力します。 スクリプトでは、JavaScriptprint()関数または形式化された JSON を返すmongo固有のprintjson()関数を使用します。例
mongoshell スクリプトの結果カーソル内のすべての項目を出力するには、次のクローンを使用します。cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
スクリプト
システム プロンプトから、 mongo shell を使用して JavaScript を評価します。
--eval オプション
--evalmongo次のように、 shell に オプションを使用して、shell に JavaScript フラグメントを渡します。
mongo test --eval "printjson(db.getCollectionNames())"
これにより、 localhostインターフェースのポート27017で実行されているmongodまたはmongosインスタンスに接続されているmongo shell を使用して、 db.getCollectionNames()の出力が返されます。
JavaScript ファイルの実行
mongo shell に.jsファイルを指定すると、 mongoは JavaScript を直接実行します。 次の例で考えてみましょう。
mongo localhost:27017/test myjsfile.js
この操作では、ポート のmyjsfile.js mongoインターフェース経由でアクセス可能な インスタンスのtest データベース mongodに接続するlocalhost shell27017 で スクリプトを実行します。
MongoDBJavaScriptあるいは、Mongo() コンストラクターを使用して ファイル内で 接続パラメータを指定することもできます。詳細については、「新しい接続の開始 」を参照してください。
次のように、 関数を使用して、.jsmongoshload() 内から ファイルを実行できます。
load("myjstest.js")
この関数は、 myjstest.jsファイルを読み込んで実行します。
load()メソッドは相対パスと絶対パスを受け入れます。 mongoshの現在の作業ディレクトリが/data/dbで、かつmyjstest.jsが/data/db/scriptsディレクトリに存在する場合、 mongosh内の次の呼び出しは同等になります。
load("scripts/myjstest.js") load("/data/db/scripts/myjstest.js")