導入
MongoDBのようなデータベースシステムは通常、データベースサーバーに接続し、データの読み取りや処理、新しいエントリの書き込みなどの操作を実行する外部アプリケーションと連携して使用されます。このような場合、データベースサーバーと直接やり取りすることはありません。データベースの管理タスクを実行したり、アドホックなデータベースクエリを実行したりするには、直接アクセスが必要になる場合があります。.
ここでMongoDBシェルの出番です。MongoDBシェルは、データベースサーバーに接続してコマンドを実行できる対話型コンソールです。管理タスクを実行したり、データを直接読み書きしたり、操作したりできます。MongoDBシェルを使用すると、コマンドライン経由でデータベースに接続し、ターミナルウィンドウから対話的に操作できます。また、外部スクリプトを実行して、繰り返しのタスクをより簡単に実行することもできます。.
このチュートリアルでは、MongoDBシェルを使用してMongoDBデータベースに接続し、対話的にデータベースにクエリを実行します。また、シェルに組み込まれているヘルプシステムとオートコンプリート機能も使用します。.
前提条件
- sudo権限を持つ通常の非rootユーザーと、UFWで設定されたファイアウォールを備えたサーバー。このチュートリアルは、Ubuntu 20.04を実行するサーバーを使用して検証されています。
- サーバーに MongoDB がインストールされています。.
- MongoDB サーバー インスタンスは、認証を有効にし、管理ユーザーを作成することで保護されます。.
注:サーバーの設定、インストール、そしてMongoDBの安全なインストール方法に関する関連チュートリアルは、Ubuntu 20.04を参照しています。このチュートリアルは、基盤となるオペレーティングシステムではなく、MongoDB自体に焦点を当てています。認証が有効になっている限り、オペレーティングシステムに関係なく、どのMongoDBインストールでも概ね動作します。.
ステップ1 – MongoDBサーバーに接続する
MongoDBシェルを開くには、サーバープロンプトからmongoコマンドを実行します。デフォルトでは、mongoコマンドはポート27017で実行されているローカルにインストールされたMongoDBインスタンスに接続するシェルを開きます。.
追加のパラメータなしで mongo コマンドを実行します。
mongo
これにより、シェルが接続しているサーバーに関する情報と、インストールされているMongoDBのバージョンを含むウェルカムメッセージが出力されます。以下の例は、MongoDBサーバーが127.0.0.1(localhostを表すループバックインターフェース)で、デフォルトのMongoDBポート(27017)とバージョン4.4.6で実行されていることを示しています。.
Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6サーバー上のすべてのデータベースを一覧表示してみます。シェルコマンドの後に「show dbs」と入力し、Enterキーを押します。
show dbsMongoDBのセキュリティ保護方法に関する前提条件チュートリアルに従っている場合、このコマンドは何も出力しません。これは、MongoDBサーバーが稼働しており、シェルが接続できたにもかかわらず、認証情報を提供しなかったためです。そのため、サーバーのデータベースを操作するためのアクセス権がないため、show dbsコマンドは何も返しません。.
次のコマンドを入力して終了します。
exitMongo シェルは簡単な終了メッセージを出力し、システム シェルに戻ります。
Output
bye注: exit コマンドを入力する代わりに、Ctrl + C を押してシェルを閉じることもできます。.
MongoDBシェルをデータベースサーバーに再度接続します。ただし、今回はMongoDBインスタンスへの適切な認証のためにユーザー名とパスワードを入力します。これを行うには、次の例のように追加のコマンドラインパラメータを指定する必要があります。
mongo -u AdminSammy -p --authenticationDatabase adminこのコマンドは複数の部分で構成されます。
- -u: このフラグは、MongoDB サーバーでの認証に使用するユーザー名を設定します。.
- -p: このフラグは、MongoDBシェルにデータベースへの接続時にパスワードを使用するように指示します。ENTERキーを押すと、ターミナルウィンドウにパスワードの入力を求められます。.
- --authenticationDatabase: このオプションは、ログインに使用するユーザー認証データベースを指定します。通常、管理アカウントは admin データベースで管理されますが、ユーザー認証データベースが異なる場合は、admin の代わりにそのデータベースを入力してください。.
注: ローカルホスト以外のマシンで実行されている MongoDB サーバーに接続するには、シェル コマンドに -h フラグを追加し、サーバーの IP アドレスを追加します。.
インストール時に設定したパスワードを入力すると、シェルに再度アクセスできるようになります。.
次に、show dbs コマンドをもう一度実行します。
show dbs
今回は、コマンドはシステム上のすべてのデータベースのリストを返します。
Output
admin 0.000GB
config 0.000GB
local 0.000GB特権ユーザーとして認証されているため、シェルではこれらのデータベースのいずれかに対してコマンドを実行できます。.
MongoDB シェルを使用して MongoDB サーバーに正常に接続できたので、シェルでコマンドを実行する方法の学習に進むことができます。.
ステップ2 – コマンドを実行する
他のコマンドラインインターフェースと同様に、MongoDBシェルはコマンドを受け付け、必要な結果を標準出力に返します。前述のように、MongoDBシェルではすべてのコマンドはコマンドラインで入力され、大なり記号(>)で示されます。コマンドの後にEnterキーを押すと、コマンドが直ちに実行され、コマンド出力が画面に表示されます。.
MongoDBデータベースのほとんどのコマンドは、選択されたデータベースまたはデータベースセットに対して実行されます。現在選択されているデータベースは、シェルからアクセスできる db オブジェクトで表されます。シェルで db と入力すると、現在選択されているデータベースを確認できます。
db新しく接続されたシェル インスタンスでは、選択されたデータベースは常に test と呼ばれます。
Output
test
このデータベースは、MongoDBとMongoDBシェルのテストに安全に使用できます。別のデータベースに切り替えるには、useコマンドに続けて新しいデータベース名を指定します。fruitというデータベースに切り替えてみます。
use fruits
シェルは、新しいデータベースを使用していることを通知します。
Output
switched to db fruitsこれを確認するには、もう一度 db と入力して、現在選択されているデータベース名を見つけます。
db今回は、出力に新しいデータベースが反映されます。
Output
fruits果物データベースを明示的に作成していないことに注意してください。MongoDBでは、まだ存在しないデータベースやコレクションに対してコマンドを実行できます。これらの構造は、オブジェクトが初めて挿入されたときにのみ作成されます。現在のデータベースを果物に変更できたとしても、このデータベースはまだ存在していません。.
このデータベースにオブジェクトを挿入して作成してみましょう。次の例では、データベース内の「apples」というコレクションにオブジェクトを挿入する方法を説明します。このオブジェクトを追加すると、fruitsデータベースと「apples」コレクションの両方が作成されます。.
MongoDBシェルに次の行を入力し、Enterキーを押します。ハイライト表示されているコレクション名(apples)に注意してください。
db.apples.insert()
開き括弧の後にEnterキーを押すと、複数行のコマンドプロンプトが起動し、複数行にわたる長いコマンドを入力できるようになります。挿入コマンドは、閉じ括弧を入力するまで完全には入力されません。閉じ括弧を入力するまで、プロンプトは大なり記号から省略記号(…)に変わります。.
このように MongoDB コマンドを複数行に分割する必要はありませんが、分割することで長いコマンドが読みやすく理解しやすくなります。.
次の行では、オブジェクトを括弧({と})で囲みます。このサンプルドキュメントには、フィールドと値のペアが1つだけあります。
{name: 'Red Delicious'}
もう一度ENTERキーを押すと、別の行が表示され、他のドキュメントやMongoDBの挿入メソッドで許可されている仕様など、コマンドパラメータを追加できます。ただし、この例では、閉じ括弧を入力してENTERキーを押すことで入力を終了し、操作を実行できます。.
今回は、Mongo シェルは挿入コマンドの終了を記録し、コマンド全体を実行します。.
Output
WriteResult({ "nInserted" : 1 })この新しいオブジェクトをデータベースに挿入すると、fruitsデータベースとapplesコレクションの両方が作成されます。show dbsコマンドで利用可能なデータベースのリストを確認してください。
show dbs
ここでも、利用可能なすべてのデータベースのリストが返されますが、今回はリストに fruits データベースが含まれます。
Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GBshow collections コマンドは、現在選択されているデータベース内のコレクションのリストを取得するのに役立ちます。
show collections
果物データベースが選択されているため、新しく作成されたリンゴのコレクションのみが返されます。
Output
applesこれで、MongoDBシェルでコマンドを実行する方法を学習しました。また、インスタンスオブジェクトを作成し、新しいデータベースと新しいコレクションを作成して、サーバー上に保存しました。.
このガイドの最後のステップでは、コマンドをよりよく理解し、より簡単に実行するために、MongoDB シェル ヘルパー機能を呼び出す方法を学習します。.
ステップ3 – シェルから対話型ヘルプを取得する
MongoDBシェルにはヘルプシステムが組み込まれており、データベースシステムで利用可能なコマンドやそこに保存されているオブジェクトに関する情報を取得できます。この入門ヘルプページは、シェルプロンプトでhelpコマンドを実行することで直接表示できます。
help
MongoDB シェルは、シェルの特定の部分に関する詳細情報や、最もよく使用されるコマンドの例を参照するために使用できる、より詳細なヘルプ エントリのリストを返します。
Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shellこの例の出力でハイライト表示されている最初の2つのエントリは、それぞれ現在のデータベースと現在のデータベース内のコレクションに対してヘルパーコマンドを実行する方法を示しています。例として示されているコレクション名はmycollですが、有効なコレクション名であればどれでも使用できます。.
最後にハイライトされている行(db.mycoll.find())は、findコマンドを使ってコレクションからオブジェクトを取得するメソッドの例です。findコマンドは、指定されたコレクション内のオブジェクトを一覧表示します。コレクションはMongoデータベースで最もよく使用される構造の一つであるため、このステップでは、Mongoのコレクションレベルのfind()メソッドとhelp()メソッドの使い方を説明します。.
まず、apples パッケージのマニュアル ページにアクセスして、このパッケージで使用できるコマンドを見つけます。
db.apples.help()
注: 元のヘルプ コマンドは単なる help でしたが、データベースおよびコレクション オブジェクトでヘルパー メソッドを実行するときは、単なる help ではなく help() として読み取られるように、コマンドの後に括弧を付ける必要があります。.
このコマンドの出力は、apples コレクションで実行できる利用可能なコマンドの長いリストです。
Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .このマニュアル ページには、db.apples コレクションで実行できる利用可能なコマンドの明確なリスト (各コマンドの後にそのコマンドの機能の簡単な説明が続きます) に加えて、find() などのよく使用されるコマンドの使用例も示されています。.
このオンボードヘルプシステムは、利用可能なコマンドの便利なリファレンスとして機能します。コマンドの正確なスペルや有効な部分を思い出せない場合は、構文を確認するために使用できます。.
find() を使用してコレクションからオブジェクトを取得できることは既にマニュアル ページから学習したので、前の手順で apples コレクションに作成されたオブジェクトを取得できるようになりました。.
しかし、この例では、コマンド補完と呼ばれるMongoDBのインタラクティブなヘルパー機能が強調されています。MongoDBシェルは、Bashやzshなどの他の一般的なシェルと同様に、キーボードのTabキーを押すと入力中のコマンドが自動的に補完されるというパターンを採用しています。.
まず次のように入力しますが、まだ Enter キーを押さないでください。
db.a
コレクション名全体を入力する代わりに、キーボードのTabキーを押してください。MongoDBシェルは、以下から始まるすべての候補のリストを表示します。
Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(この出力には、開いた括弧で示される 3 つのコマンドと、設定されたリンゴがリストされます。.
シェルに別の文字を入力します。
db.ap
もう一度Tabキーを押します。今回はapで始まる他の選択肢はなく、MongoDBシェルが入力を自動補完し、db.applesと入力します。同じ手順で、find()コマンドもTabキー補完を使って補完します。fiと入力しますが、Enterキーは押さないでください。
db.apples.fi
Tabキーを押すと、コマンド名がdb.apples.findまで自動補完されます。この時点でもう一度Tabキーを押すと、シェルはさらに多くの候補を表示しますが、findコマンドを実行するには手動で閉じ括弧を追加することもできます。
db.apples.find()
シェルはappleコレクション内のすべてのオブジェクトのリストを表示します。表示されるオブジェクトは、先ほどインポートした1つだけです。
Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }結果
この記事では、MongoDB シェルについて紹介します。このシェルを使用すると、データベースに新しいオブジェクトを挿入したり、既存のコレクションをクエリしたり、データベース、データ、ユーザーを管理するための管理タスクを実行したりできます。.









