著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

MongoDBなどのデータベースシステムは通常、データベースサーバーに接続し、データの読み取りと処理、新しいエントリの書き込みなどの操作を実行する外部アプリケーションで使用されます。 このような場合、データベースサーバーと直接対話しているわけではありません。 ただし、データベースで管理タスクを実行したり、アドホックデータベースクエリを自分で実行したりするには、直接アクセスが必要になる場合があります。

そこで登場するのがMongoDBシェルです。 MongoDBシェルは、データベースサーバーに接続してコマンドを実行するために使用できるインタラクティブなコンソールであり、管理タスクを実行したり、データを直接読み取り、書き込み、操作したりできます。 MongoDBシェルを使用すると、コマンドラインプロンプトからデータベースに接続し、ターミナルウィンドウからデータベースをインタラクティブに操作できます。 また、外部スクリプトを実行して、より便利に繰り返しタスクを実行することもできます。

このチュートリアルでは、MongoDBシェルを使用してMongoDBデータベースに接続し、データベースにインタラクティブにクエリを実行します。 また、シェルに含まれている組み込みのヘルプシステムとオートコンプリート機能も使用します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • 通常のroot以外のユーザーがいるサーバー sudo 特権と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 コマンドは、ポートで実行されているローカルにインストールされたMongoDBインスタンスに接続されたシェルを開きます 27017.

を実行してみてください mongo 追加パラメーターなしのコマンド:

  1. 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

このメッセージの下に、MongoDBシェルのプロンプト(大なり記号で示されます)が表示されます。

サーバーで使用可能なすべてのデータベースを一覧表示してみてください。 タイプ show dbs シェルプロンプトの後、を押します ENTER:

  1. show dbs

MongoDBを保護する方法の前提条件のチュートリアルに従ったとすると、このコマンドは出力を返しません。 これは、MongoDBサーバーが実行されていて、シェルがそれに接続できたとしても、認証情報を提供しなかったためです。 このため、サーバーデータベースやサーバーデータベースを操作するためのアクセス権はありません。 show dbs コマンドは何も返しません。

次のように入力してシェルを終了します。

  1. exit

Mongoシェルは、簡単なさようならメッセージを出力し、システムシェルに戻ります。

Output
bye

:入力する代わりに exit コマンド、シェルを閉じる別の方法はを押すことです CTRL + C 代わりは。

次に、MongoDBシェルをデータベースサーバーに再接続してみますが、今回は、MongoDBインスタンスに対して適切に認証するためのユーザー名とパスワードを指定します。 そのためには、次の例のように、追加のコマンドラインパラメーターを指定する必要があります。

  1. mongo -u AdminSammy -p --authenticationDatabase admin

このコマンドは、いくつかの部分で構成されています。

  • -u:このフラグは、MongoDBサーバーへの認証に使用されるユーザー名を設定します。 この例では、前提条件のMongoDBセキュリティチュートリアルAdminSammyで作成された管理ユーザーを指定します。 このチュートリアルでは、これを独自の管理ユーザーのユーザー名に置き換えることができます(異なる場合)。
  • -p:このフラグは、データベースに接続するときにパスワードを使用するようにMongoDBシェルに指示します。 を押すと、ターミナルウィンドウでパスワードを入力するように求められます ENTER.
  • --authenticationDatabase:このオプションは、ログインしているユーザーの認証データベースを指定します。 通常、管理者アカウントは admin データベースですが、ユーザーの認証データベースが異なる場合は、代わりにそのデータベースを入力してください admin.

:ローカルホストとは異なるマシンで実行されているMongoDBサーバーに接続するには、 -h フラグの後に、シェルコマンドに対するサーバーのIPアドレスが続きます。

インストール中に設定したパスワードを入力すると、もう一度シェルにアクセスできるようになります。

今すぐ実行してみてください show dbs もう一度コマンド:

  1. show dbs

今回、このコマンドは、システムで使用可能なすべてのデータベースのリストを返します。

Output
admin 0.000GB config 0.000GB local 0.000GB

特権ユーザーとして認証されているため、シェルを使用すると、これらのデータベースのいずれかでコマンドを実行できます。

これで、MongoDBシェルを使用してMongoDBサーバーに正常に接続できたので、シェルでコマンドを実行する方法の学習に進むことができます。

ステップ2—コマンドの実行

他のコマンドラインインターフェイスと同様に、MongoDBシェルはコマンドを受け入れ、目的の結果を標準出力に返します。 前述のように、MongoDBシェルでは、すべてのコマンドが大なり記号(>). 押す ENTER コマンドがすぐにそれを実行し、コマンド出力を画面に返した後。

MongoDBデータベースのほとんどのコマンドは、データベースまたは選択したデータベースのコレクションで実行されます。 現在選択されているデータベースは、 db シェルを介してアクセス可能なオブジェクト。 次のように入力すると、現在選択されているデータベースを確認できます。 db シェルに:

  1. db

新しく接続されたシェルインスタンスでは、選択されたデータベースは常に呼び出されます test:

Output
test

このデータベースを安全に使用して、MongoDBとMongoDBシェルを試すことができます。 別のデータベースに切り替えるには、 use コマンドの後に新しいデータベース名が続きます。 と呼ばれるデータベースに切り替えてみてください fruits:

  1. use fruits

シェルは、新しいデータベースを使用していることを通知します。

Output
switched to db fruits

これを確認するには、次のように入力します db 現在選択されているデータベースの名前をもう一度検索するには、次のようにします。

  1. db

今回は、出力に新しいデータベースが反映されます。

Output
fruits

明示的に作成していないことに注意してください fruits データベース。 MongoDBを使用すると、まだ存在していないデータベースやコレクションに対してコマンドを実行できます。 これらの構造は、オブジェクトが最初に挿入されたときにのみ作成されます。 現在のデータベースをに正常に変更した場合でも fruits、このデータベースはまだ存在していません。

オブジェクトを挿入して、このデータベースを作成してみてください。 次の例は、データベース内のコレクションにオブジェクトを挿入する方法の概要を示しています。 apples. このオブジェクトを追加することにより、操作は両方を作成します fruits データベースと apples コレクション。

次の行をMongoDBシェルに入力し、を押します ENTER. 強調表示されたコレクション名に注意してください(apples):

  1. db.apples.insert(

押す ENTER かっこを開くと、複数行のコマンドプロンプトが開始され、複数行に長いコマンドを入力できるようになります。 The insert 閉じ括弧を入力するまで、コマンドは完了として登録されません。 そうするまで、プロンプトは大なり記号から省略記号に変わります(...).

このようにMongoDBコマンドを複数行に分割する必要はありませんが、分割すると、長いコマンドを読みやすく、理解しやすくなります。

次の行で、中括弧のペア内にオブジェクトを入力します({}). このサンプルドキュメントには、フィールドと値のペアが1つだけあります。

  1. {name: 'Red Delicious'}

もう一度押すと ENTER、別の行プロンプトが表示され、他のドキュメントやMongoDBの挿入メソッドで許可されている仕様などのコマンドパラメーターをさらに追加できます。 ただし、この例では、閉じ括弧を入力してを押すことにより、入力を終了して操作を実行できます。 ENTER:

  1. )

今回は、Mongoシェルがエンディングを登録します insert コマンドを実行し、ステートメント全体を実行します。

Output
WriteResult({ "nInserted" : 1 })

オブジェクトの作成について詳しくは、このシリーズの次のチュートリアルCRUD操作の実行方法をご覧ください。

この新しいオブジェクトをデータベースに挿入した後、両方の fruits データベースと apples コレクションが存在します。 利用可能なデータベースのリストを確認してください show dbs 指図:

  1. show dbs

繰り返しますが、これは利用可能なすべてのデータベースのリストを返しますが、今回はリストに fruits データベース:

Output
admin 0.000GB config 0.000GB fruits 0.000GB local 0.000GB

現在選択されているデータベースで利用可能なコレクションのリストを取得するには、 show collections コマンドは便利です:

  1. show collections

以来 fruits データベースを選択すると、新しく作成されたデータベースのみが返されます apples コレクション:

Output
apples

これで、MongoDBシェルでコマンドを実行する方法を学びました。 また、サンプルオブジェクトを作成しました。これにより、新しいデータベースと新しいコレクションが作成され、サーバーに永続化されます。

このガイドの最後のステップでは、MongoDBシェルのヘルプ機能を呼び出して、コマンドをよりよく理解し、より簡単に実行する方法を学習します。

ステップ3—シェルからインタラクティブヘルプを取得する

MongoDBシェルには、データベースシステムで使用可能なコマンドとその中に格納されているオブジェクトに関する情報を取得するために使用できるヘルプシステムが組み込まれています。 この紹介ヘルプ画面には、 help シェルプロンプトで直接コマンド:

  1. 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() —は、を使用してコレクションからオブジェクトを取得する1つの方法の例です。 find コマンド。特定のコレクション内のオブジェクトを一覧表示します。 コレクションはMongoデータベースで最も一般的に使用される構造の一部であるため、このステップでは、Mongoの使用方法について説明します。 find()help() コレクションレベルのメソッド。

まず、にアクセスします apples このコレクションで使用可能なコマンドを見つけるためのコレクションのヘルプ画面:

  1. 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キーを押さないでください

  1. db.a

コレクション名を完全に入力する代わりに、 TAB キーボードのキー。 MongoDBシェルは、で始まるすべての利用可能な可能性のリストで応答します a:

Output
> db.a db.adminCommand( db.aggregate( db.apples db.auth(

この出力には、開き括弧で示された3つのコマンドと、 apples コレクション。

シェルにもう1文字入力します。

  1. db.ap

プレス TAB もう一度。 今回は、他に可能性はありません。 ap MongoDBシェルは自動的にエントリを完了して入力します db.apples あなたのために。 同じ原則に従い、 find() コマンドを使用して TAB 完了。 タイプ fi ただし、ENTERを押さないでください。

  1. db.apples.fi

押す TAB コマンド名を自動的に完成させます db.apples.find. この時点で、 TAB この場合も、シェルはさらに可能性をリストしますが、閉じ括弧を手動で追加して、 find 指図:

  1. db.apples.find()

シェルは、で見つかったすべてのオブジェクトのリストを表示します apples コレクション。 以前に挿入したオブジェクトは1つだけです。

Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }

この例では、オブジェクトの作成コマンドと取得コマンドを使用して、対話型シェルの使用方法を説明しました。 データベースオブジェクトの操作について詳しくは、このシリーズの次のチュートリアルCRUD操作の実行方法をご覧ください。

これで、組み込みのヘルプシステムとMongoシェルのオートコンプリート機能の使用方法を学びました。

結論

この記事を読むことで、MongoDBシェルに慣れることができます。 シェルを使用すると、データベースに新しいオブジェクトを挿入したり、既存のコレクションにクエリを実行したり、データベース、そのデータ、およびそのユーザーを管理するための管理タスクを実行したりできます。

MongoDBシェルは、データベースやコレクションのオブジェクトやメソッドなど、Mongoのほとんどの機能への直接アクセスを公開し、データベースサーバーと対話するための主要なツールになります。 ただし、MongoDBシェルスクリプトまたは drivers のいずれかを介して、MongoDBをプログラムで操作する場合は、同じ関数とメソッドのセットを使用できます。MongoDBは多くのプログラミング言語で利用できるようになっています。

このチュートリアルで説明されている原則に従って、MongoDBシェルでこのシリーズの他の記事のコマンドを実行できます。 公式のMongoDBドキュメントでMongoDBシェルの詳細を学ぶことをお勧めします。