MongoDBシェルの使用方法

提供:Dev Guides
移動先:案内検索

著者は、 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.1localhost を表すループバックインターフェイス)で実行され、バージョン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シェルは、Bashzshなどの他の一般的なシェルに見られるパターンに従い、キーボードの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シェルの詳細を学ぶことをお勧めします。