警告
次のドキュメントは、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
以外の変数に割り当てることができます。mongo
shell での書込み操作では、デフォルトで{ w: 1 }の書込み保証が使用されます。 一括操作を実行する場合は、Bulk()
メソッドを使用します。シェルshell (例: JavaScript ファイル内の
use <dbname>
、show dbs
など)は、有効な JavaScript ではないためです。次の表は、最も一般的な
mongo
shellヘルパーをJavaScriptにマッピングします。shellヘルパーJavaScript と同等show dbs
,show databases
db.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(); } 対話モードでは、
mongo
shell はすべてのカーソルの内容を含む操作の結果を出力します。 スクリプトでは、JavaScriptprint()
関数または形式化された JSON を返すmongo
固有のprintjson()
関数を使用します。例
mongo
shell スクリプトの結果カーソル内のすべての項目を出力するには、次のクローンを使用します。cursor = db.collection.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }
スクリプト
システム プロンプトから、 mongo
shell を使用して JavaScript を評価します。
--eval
オプション
--eval
mongo
次のように、 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()
コンストラクターを使用して ファイル内で 接続パラメータを指定することもできます。詳細については、「新しい接続の開始 」を参照してください。
次のように、 関数を使用して、.js
mongosh
load()
内から ファイルを実行できます。
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")