著者は、 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シェルの詳細を学ぶことをお勧めします。