MongoDBシェルの使用方法
著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
MongoDBなどのデータベースシステムは通常、データベースサーバーに接続し、データの読み取りと処理、新しいエントリの書き込みなどの操作を実行する外部アプリケーションで使用されます。 このような場合、データベースサーバーと直接対話しているわけではありません。 ただし、データベースで管理タスクを実行したり、アドホックデータベースクエリを自分で実行したりするには、直接アクセスが必要になる場合があります。
そこで登場するのがMongoDBシェルです。 MongoDBシェルは、データベースサーバーに接続してコマンドを実行するために使用できるインタラクティブなコンソールであり、管理タスクを実行したり、データを直接読み取り、書き込み、操作したりできます。 MongoDBシェルを使用すると、コマンドラインプロンプトからデータベースに接続し、ターミナルウィンドウからデータベースをインタラクティブに操作できます。 また、外部スクリプトを実行して、より便利に繰り返しタスクを実行することもできます。
このチュートリアルでは、MongoDBシェルを使用してMongoDBデータベースに接続し、データベースにインタラクティブにクエリを実行します。 また、シェルに含まれている組み込みのヘルプシステムとオートコンプリート機能も使用します。
前提条件
このチュートリアルに従うには、次のものが必要です。
sudo
権限を持つ通常の非rootユーザーと、UFWで構成されたファイアウォールを備えたサーバー。 このチュートリアルは、Ubuntu 20.04を実行しているサーバーを使用して検証されており、Ubuntu20.04のこの初期サーバーセットアップチュートリアルに従ってサーバーを準備できます。- サーバーにインストールされているMongoDB。 これを設定するには、 Ubuntu20.04にMongoDBをインストールする方法に関するチュートリアルに従ってください。
- 認証を有効にして管理ユーザーを作成することにより、サーバーのMongoDBインスタンスを保護します。 このようにMongoDBを保護するには、 Ubuntu20.04でMongoDBを保護する方法に関するチュートリアルに従ってください。
注:サーバーの構成、インストール、およびMongoDBの安全なインストールの方法に関するリンクされたチュートリアルは、Ubuntu20.04を参照しています。 このチュートリアルは、基盤となるオペレーティングシステムではなく、MongoDB自体に焦点を当てています。 通常、認証が有効になっている限り、オペレーティングシステムに関係なく、すべてのMongoDBインストールで機能します。
ステップ1—MongoDBサーバーに接続する
MongoDBシェルを開くには、サーバープロンプトからmongo
コマンドを実行します。 デフォルトでは、mongo
コマンドは、ポート27017
で実行されているローカルにインストールされたMongoDBインスタンスに接続されたシェルを開きます。
追加のパラメーターを指定せずにmongo
コマンドを実行してみてください。
mongo
これにより、シェルが接続されているサーバーに関する情報と、インストールされているMongoDBのバージョンが記載されたウェルカムメッセージが出力されます。 次の例は、MongoDBサーバーがMongoDBのデフォルトポート(27017
)の127.0.0.1
( localhost を表すループバックインターフェイス)で実行され、バージョン4.4を実行していることを示しています。 6。
OutputMongoDB 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
このメッセージの下に、MongoDBシェルのプロンプト(大なり記号で示されます)が表示されます。
サーバーで使用可能なすべてのデータベースを一覧表示してみてください。 シェルプロンプトの後にshow dbs
と入力し、ENTER
を押します。
show dbs
MongoDBを保護する方法の前提条件のチュートリアルに従ったとすると、このコマンドは出力を返しません。 これは、MongoDBサーバーが実行されていて、シェルがそれに接続できたとしても、認証情報を提供しなかったためです。 このため、どのサーバーデータベースを操作するためのアクセス権もありません。また、show dbs
コマンドは何も返しません。
次のように入力してシェルを終了します。
exit
Mongoシェルは、簡単なさようならメッセージを出力し、システムシェルに戻ります。
Outputbye
注:exit
コマンドを入力する代わりに、シェルを閉じる別の方法は、代わりにCTRL + C
を押すことです。
次に、MongoDBシェルをデータベースサーバーに再接続してみますが、今回は、MongoDBインスタンスに対して適切に認証するためのユーザー名とパスワードを指定します。 そのためには、次の例のように、追加のコマンドラインパラメーターを指定する必要があります。
mongo -u AdminSammy -p --authenticationDatabase admin
このコマンドは、いくつかの部分で構成されています。
-u
:このフラグは、MongoDBサーバーへの認証に使用されるユーザー名を設定します。 この例では、前提条件のMongoDBセキュリティチュートリアル、AdminSammyで作成された管理ユーザーを指定します。 このチュートリアルでは、これを独自の管理ユーザーのユーザー名に置き換えることができます(異なる場合)。-p
:このフラグは、データベースに接続するときにパスワードを使用するようにMongoDBシェルに指示します。ENTER
を押すと、ターミナルウィンドウでパスワードの入力を求められます。--authenticationDatabase
:このオプションは、ログインしているユーザーの認証データベースを指定します。 通常、管理者アカウントはadmin
データベースで管理されますが、ユーザーの認証データベースが異なる場合は、admin
の代わりにそのデータベースを入力してください。
注:ローカルホストとは異なるマシンで実行されているMongoDBサーバーに接続するには、-h
フラグに続いて、サーバーのIPアドレスをシェルコマンドに追加できます。
インストール中に設定したパスワードを入力すると、もう一度シェルにアクセスできるようになります。
ここで、show dbs
コマンドをもう一度実行してみてください。
show dbs
今回、このコマンドは、システムで使用可能なすべてのデータベースのリストを返します。
Outputadmin 0.000GB config 0.000GB local 0.000GB
特権ユーザーとして認証されているため、シェルを使用すると、これらのデータベースのいずれかでコマンドを実行できます。
これで、MongoDBシェルを使用してMongoDBサーバーに正常に接続できたので、シェルでコマンドを実行する方法の学習に進むことができます。
ステップ2—コマンドの実行
他のコマンドラインインターフェイスと同様に、MongoDBシェルはコマンドを受け入れ、目的の結果を標準出力に返します。 前述のように、MongoDBシェルでは、すべてのコマンドが大なり記号(>
)で示されるコマンドプロンプトに入力されます。 コマンドが実行された直後にENTER
を押すと、コマンド出力が画面に戻ります。
MongoDBデータベースのほとんどのコマンドは、データベースまたは選択したデータベースのコレクションで実行されます。 現在選択されているデータベースは、シェルからアクセスできるdb
オブジェクトで表されます。 シェルにdb
と入力すると、現在選択されているデータベースを確認できます。
db
新しく接続されたシェルインスタンスでは、選択されたデータベースは常にtest
と呼ばれます。
Outputtest
このデータベースを安全に使用して、MongoDBとMongoDBシェルを試すことができます。 別のデータベースに切り替えるには、use
コマンドの後に新しいデータベース名を実行します。 fruits
というデータベースに切り替えてみてください。
use fruits
シェルは、新しいデータベースを使用していることを通知します。
Outputswitched to db fruits
db
ともう一度入力して、現在選択されているデータベースの名前を見つけることで、これを確認できます。
db
今回は、出力に新しいデータベースが反映されます。
Outputfruits
fruits
データベースを明示的に作成していないことに注意してください。 MongoDBを使用すると、まだ存在していないデータベースやコレクションに対してコマンドを実行できます。 これらの構造は、オブジェクトが最初に挿入されたときにのみ作成されます。 現在のデータベースをfruits
に正常に変更しましたが、このデータベースはまだ存在していません。
オブジェクトを挿入して、このデータベースを作成してみてください。 次の例は、apples
というデータベース内のコレクションにオブジェクトを挿入する方法の概要を示しています。 このオブジェクトを追加することにより、操作はfruits
データベースとapples
コレクションの両方を作成します。
次の行をMongoDBシェルに入力し、ENTER
を押します。 強調表示されたコレクション名(apples
)に注意してください。
db.apples.insert(
開き括弧の後にENTER
を押すと、複数行のコマンドプロンプトが開始され、複数行に長いコマンドを入力できるようになります。 insert
コマンドは、閉じ括弧を入力するまで完了として登録されません。 そうするまで、プロンプトは大なり記号から省略記号(...
)に変わります。
このようにMongoDBコマンドを複数行に分割する必要はありませんが、分割すると、長いコマンドを読みやすく、理解しやすくなります。
次の行で、中括弧のペア({
と}
)内にオブジェクトを入力します。 このサンプルドキュメントには、フィールドと値のペアが1つだけあります。
{name: 'Red Delicious'}
もう一度ENTER
を押すと、別の行プロンプトが表示され、他のドキュメントやMongoDBの挿入メソッドで許可されている仕様などのコマンドパラメーターを追加できます。 ただし、この例では、閉じ括弧を入力してENTER
を押すことにより、入力を終了して操作を実行できます。
)
今回は、Mongoシェルがinsert
コマンドの終了を登録し、ステートメント全体を実行します。
OutputWriteResult({ "nInserted" : 1 })
オブジェクトの作成について詳しくは、このシリーズの次のチュートリアルCRUD操作の実行方法をご覧ください。
この新しいオブジェクトをデータベースに挿入すると、fruits
データベースとapples
コレクションの両方が存在します。 show dbs
コマンドを使用して、使用可能なデータベースのリストを確認します。
show dbs
この場合も、使用可能なすべてのデータベースのリストが返されますが、今回のリストにはfruits
データベースが含まれています。
Outputadmin 0.000GB config 0.000GB fruits 0.000GB local 0.000GB
現在選択されているデータベースで使用可能なコレクションのリストを取得するには、show collections
コマンドが便利です。
show collections
fruits
データベースが選択されているため、新しく作成されたapples
コレクションのみが返されます。
Outputapples
これで、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つのエントリは、現在のデータベースと現在のデータベース内のコレクションに対してそれぞれhelp
コマンドを実行する方法を示しています。 示されているコレクション名の例はmycoll
ですが、任意の有効なコレクション名を使用できます。
最後に強調表示されている行— db.mycoll.find()
—は、find
コマンドを使用してコレクションからオブジェクトを取得する1つの方法の例です。このコマンドは、特定のコレクション内のオブジェクトを一覧表示します。 コレクションはMongoデータベースで最も一般的に使用される構造の一部であるため、この手順では、Mongoのfind()
およびhelp()
コレクションレベルのメソッドの使用方法について説明します。
まず、apples
コレクションのヘルプ画面にアクセスして、このコレクションで使用できるコマンドを見つけます。
db.apples.help()
注:最初のヘルプコマンドはhelp
でしたが、データベースおよびコレクションオブジェクトでヘルプメソッドを実行する場合は、コマンドの後に括弧を付けて実行する必要があります。 help
だけでなく、help()
と読みます。
このコマンドの出力は、apples
コレクションで実行できる使用可能なコマンドの長いリストになります。
OutputDBCollection 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シェルは、a
で始まる利用可能なすべての可能性のリストで応答します。
Output> db.a db.adminCommand( db.aggregate( db.apples db.auth(
この出力には、開き括弧で示された3つのコマンドと、apples
コレクションが一覧表示されます。
シェルにもう1文字入力します。
db.ap
もう一度TAB
を押します。 今回は、ap
で始まる他の可能性はなく、MongoDBシェルが自動的にエントリを完了し、db.apples
と入力します。 同じ原則に従い、TAB
補完を使用してfind()
コマンドを完了します。 fi
と入力しますが、はENTERを押さないでください。
db.apples.fi
TAB
を押すと、コマンド名が自動的にdb.apples.find
になります。 この時点で、TAB
をもう一度押すと、シェルにさらに可能性が一覧表示されますが、閉じ括弧を手動で追加して、find
コマンドを実行できます。
db.apples.find()
シェルには、apples
コレクションで見つかったすべてのオブジェクトのリストが表示されます。 以前に挿入したオブジェクトは1つだけです。
Output{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }
この例では、オブジェクトの作成コマンドと取得コマンドを使用して、対話型シェルの使用方法を説明しました。 データベースオブジェクトの操作について詳しくは、このシリーズの次のチュートリアルCRUD操作の実行方法をご覧ください。
これで、組み込みのヘルプシステムとMongoシェルのオートコンプリート機能の使用方法を学びました。
結論
この記事を読むことで、MongoDBシェルに慣れることができます。 シェルを使用すると、データベースに新しいオブジェクトを挿入したり、既存のコレクションにクエリを実行したり、データベース、そのデータ、およびそのユーザーを管理するための管理タスクを実行したりできます。
MongoDBシェルは、データベースやコレクションのオブジェクトやメソッドなど、Mongoのほとんどの機能への直接アクセスを公開し、データベースサーバーと対話するための主要なツールになります。 ただし、MongoDBシェルスクリプトまたは drivers のいずれかを介して、MongoDBをプログラムで操作する場合は、同じ関数とメソッドのセットを使用できます。MongoDBは多くのプログラミング言語で利用できるようになっています。
このチュートリアルで説明されている原則に従って、MongoDBシェルでこのシリーズの他の記事のコマンドを実行できます。 公式のMongoDBドキュメントでMongoDBシェルの詳細を学ぶことをお勧めします。