ポイント: データベース管理のための基本的なMongoDBコマンドが概説されており、接続、ユーザー管理、ログ確認に焦点を当てています。ユーザーの作成、更新、削除、およびコレクションやデータベースの管理に関する実用的なコマンド例が提供されています。
- MongoDBは、ドキュメントとコレクションを使用して動作し、高いパフォーマンスを確保します。
- 主要なコマンドには、ユーザー管理、データベース統計、およびコレクションの詳細が含まれます。
この記事では、MongoDBデータベース管理に最も便利なコマンドについて説明します。
まず、MongoDBの基本概念に慣れましょう。それから、さまざまな基本的な管理機能を実行する方法をコマンドとともに示します:
始めましょう!
MongoDBの概要
MongoDBは高性能で高スケーラビリティのクロスプラットフォームNoSQLデータベースです。MongoDBはドキュメント、コレクション、データベースのような概念に依存しています:
- コレクションとドキュメントは、RDBMSデータベースの従来のテーブルと行に類似しています。
- 単一のMongoDBインスタンスには複数のデータベースを含むことができます。データベースはコレクションの物理コンテナで、システム内に専用のファイル構造があります。
コレクションはMongoDBドキュメントのグループを含みます。コレクションはデータベース内に作成され、従来のデータベースのようにスキーマを強制しません。したがって、同じコレクション内の異なるドキュメントは異なるフィールドを持つことができます。MongoDBドキュメントはキーと値のペアに基づいています。
従来のRDBMS用語がMongoDB構造にどのように関連しているかを簡単に見てみましょう。
ログの確認
コレクションの名前の変更
| リレーショナルデータベース管理システム | MongoDB |
| データベース | データベース |
| テーブル | コレクション |
| 行 | BSONドキュメント |
| 列 | BSONフィールド |
| インデックス | インデックス |
| 主キー | _idフィールド(主キー)MongoDBはデフォルトで各ドキュメントに12バイトの16進数の番号を自動生成します。 |
| グループ | 集約 |
| 結合 | 埋め込みとリンク |
他のデータベースと同様に、MongoDBは管理が必要です。そこで管理コマンドが登場します。見てみましょう。
MongoDBへの接続コマンド
まず、MongoDBデータベースに接続する方法を知る必要があります。mongoコマンドを使用してMongoDBデータベースに接続し、必要に応じてホストやポートのようなパラメータを使用できます。
- mongo このコマンドをローカルホストシェルで実行して、デフォルトのポート27017でローカルデータベースに接続します。
- mongo <host>/<database> 特定のデータベースに接続するためにホストとデータベースをパラメータとして指定します。
- mongo –host <hostname/IP> –port <port no> [options] データベースに接続する際に異なるオプションを指定するためにこの形式を使用できます。利用可能なすべてのオプションに関する詳細情報はmongoのマニュアルページやヘルプを参照してください。
mongo –host <hostname/IP> –port <port no> --authenticationDatabase <database> -u <user> -p <password>
ヘルプ
mongo --host 10.10.10.59 --port 27017 --verbose
MongoDBインストールで認証が有効になっている場合、ユーザーの詳細と認証データベースを指定できます。認証データベースは、ユーザー詳細が存在する場所であり、ユーザーを作成するために使用される任意のデータベースです。コマンドでパスワードを指定しない場合、cmdは後でそれを求めます。
mongo --port 27017 --authenticationDatabase "admin" -u "barryadmin" -p
MongoDB表示コマンド
MongoDBデータベースのオブジェクトを表示する方法を見てみましょう。showコマンドを使用して、既存のデータベース、コレクション、ロール、ユーザーを取得できます。
すべてのデータベースを表示
show dbs
データベース内のコレクションを表示
show collections / db.getCollectionNames()
データベース内のロールを表示
show roles
データベース内のユーザーを表示
show users / db.getUsers()
ユーザー管理コマンド
最も重要な管理タスクの1つは、ユーザーの権限を管理することです。MongoDBは、ユーザーとロールを使用してこの機能を提供し、簡単なアクセス制御のための組み込みロールを持っています。
アクセス制御機能を使用するには、MongoDBの設定ファイルで「authentication」オプションを有効にする必要があります。mongod.confファイルに以下の行を追加し、変更を反映させるためにMongoDBサービスを再起動します。
/etc/mongod.conf
security:
authorization: "enabled"
ユーザーを作成
createUserコマンドを使用すると、ユーザーを作成できます。車両データベース用に、読み取りおよび書き込み権限のみを持つユーザーを作成しましょう。
構文:
例:
結果:
db.createUser(
{
user: ,
pwd: ,
roles: [
{role: , db: }
]
}
)
例:
use vehicles
db.createUser(
{
user: "barryvehicles",
pwd: passwordPrompt(),
roles: [
{role: 'readWrite', db: "vehicles"}
]
}
)
結果:
passwordPromt()関数は、createUserコマンドを実行する際にパスワードを求めます。このユーザーは「vehicles」データベースに作成されます。
したがって、このユーザーで認証を行う際には、「vehicles」データベースを「authenticationDatabase」として指定する必要があります。データベースユーザーは、他のデータベースの権限を定義する際に、任意のデータベースに作成できます。
結果:
mongo --port 27017 --authenticationDatabase "vehicles" -u "barryvehicles" -p
結果:
ユーザー詳細の更新
ユーザーの詳細は、 updateUser()コマンドを使用して更新できます。ユーザーロールを更新する際には、すべての希望するロールを指定する必要があります。なぜなら、updateUser()は既存のルールを上書きするからです。
この例では、「barryvehicles」ユーザーをカスタムフィールドで更新し、adminデータベースに対する読み取り権限を与えます。「customData」セクションでは、任意のカスタムキーのペアを作成できます。これはユーザーロールには影響を与えず、カスタムフィールドはユーザーに追加の詳細を加えるための情報セクションと見なすことができます。
構文:
例:
結果:
db.updateUser(
<"username">,
{
customData : { },
roles: [
{role: , db: }
]
}
)
例:
db.updateUser(
"barryvehicles",
{
customData : { usertype: 'dbadmin' },
roles: [
{role: 'readWrite', db: "vehicles"},
{role: 'read', db: "admin"}
]
}
)
結果:
ユーザーの削除
ユーザーはdropUser()コマンドを使用して削除できます。次の例では、「barryvehicles」ユーザーを削除します。
構文:
例:
結果:
db.dropUser()
例:
>db.dropUser("barryvehicles")
結果:
MongoDBのログを確認するための2つの方法があります。私たちは:
- mongodログファイルを確認する
- getLog()コマンドを使用する
getLog()は、最近のログイベントを返します。このコマンドはRAMキャッシュ内の最近の1024 MongoDBログイベントを読み取ります。MongoDBの以前のバージョンでは、ログはプレーンテキスト形式で返されました。しかし、MongoDB 4.4では、ログはExtended JSON v2.0でフォーマットされています。
構文:
db.adminCommand( { getLog: } )
getLog()コマンドには3つの可能な値があります。それらは
-
- * getLog()コマンドの使用可能な値のリストを返します。
- global 最近のすべてのログエントリを返します。
- startupWarnings 現在のプロセスが開始されてからのエラーまたは警告を含む可能性のあるログエントリを返します。
例:
結果:
db.adminCommand( { getLog: "*" } )
db.adminCommand( { getLog : "global" } )
結果:
データベース管理コマンド
このセクションでは、基本的なデータベース管理コマンドをカバーします。これにより、サーバーの統計、コレクションの統計、コレクションのサイズなどを把握できます。
helpは、管理者のツールボックスにおいて必須のコマンドです。helpコマンドは、MongoDBで利用可能なヘルプオプションのリストを提供します。
通常のヘルプ:
結果:
help
結果:
ここでは、MongoDBで利用可能なすべてのヘルプオプションを確認できます。データベースで作業するために必要なすべてのヘルプコマンドを取得するには、db.help()コマンドを実行してください。
結果:
db.help()
結果:
データベースの詳細を取得
stats()コマンドは、データベースの統計情報を提供します。提供される情報は、コレクション数やオブジェクト(ドキュメント)の数、データベースサイズからインデックスまでの範囲です。
scaleFactorは、データサイズがどのように表現されるかを反映します。デフォルトのscaleFactorは1に設定されており、バイト単位でデータを表示します。たとえば、scaleFactorを1024に変更すると、サイズをキロバイト単位で表示できます。
結果:
db.stats()
結果:
サーバーの詳細を取得するには、db.serverStats()コマンドを使用します。
結果:
db.serverStats()
結果:
接続名のリストを取得するには、getCollectionNames() コマンドを使用します。
結果:
db.getCollectionNames()
結果:
コレクションの詳細を取得および返却
コレクションの統計を取得
status()関数は、コレクションの包括的な概要を提供します。
結果:
db.vehicledetails.stats()
結果:
コレクションのレイテンシを取得
latencyStatus()コマンドを使用して、読み取りおよび書き込み操作の平均レイテンシと、読み取りおよび書き込み操作の数を取得します。
結果:
db.vehicledetails.latencyStats()
結果:
コレクションのサイズを取得
以下のコマンドは、さまざまな方法でコレクションのサイズを調べるために使用されます:
- dataSize()は、コレクション内のデータのサイズを表示します。
- storageSize() は、コレクション内のドキュメントに割り当てられたストレージの合計量を示します。
- totalSize()は、ドキュメントとインデックスを含むコレクションの合計サイズを示します。
- totalIndexSize()は、コレクションのインデックス化されたサイズを提供します。
結果:
db.vehicledetails.dataSize()
db.vehicledetails.storageSize()
db.vehicledetails.totalSize()
db.vehicledetails.totalIndexSize()
結果:
「vehicledetails」は小さなコレクションであるため、storageSizeはtotalIndexSizeと等しく、インデックス化されたデータはコレクション内の生データと等しく、さらなる圧縮は不可能です。
既存のコレクションの名前を変更するには、renameCollection関数を使用します。(この関数はシャーディングされたコレクションには対応していません。)
コレクションの名前を変更する際には、ソースネームスペースと宛先ネームスペースを正しく指定する必要があります。MongoDBでは、ネームスペースはデータベースオブジェクトを特定するための一意の名前に関連しています。
以下の例では、車両データベース内の「vehicledetails」コレクションの名前を変更しています。古いコレクションと新しいコレクションを区別するために、ネームスペースを.として定義しています。
結果:
サーバーを終了する
MongoDBインスタンスを完全に終了したい場合は、組み込みのshutdownServer()コマンドを使用できます。shutdownServer()は、MongoDBプロセスを終了する前にデータベースによって使用されるすべてのリソースをクリーンアップします。
コマンドは、実行するために管理データベースに対して発行する必要があります。これを実現するために、getSiblingDB関数を使用して管理データベースを示します。
構文:
forceオプションは、シャットダウン操作を強制し、進行中の操作を中断してMongoDBインスタンスを終了します。timeoutSecオプションは、シャットダウンが発生する前の時間を秒単位で設定するために使用できます。認証された環境では、ユーザーはこのコマンドを実行するためにシャットダウン権限を持っている必要があります。
次の例では、10秒以内にMongoDBインスタンスを強制終了します。getSiblingDB関数は、シャットダウン関数を管理データベースに指し示すことを可能にします。
結果:
これでMongoDBコマンドのチュートリアルが終了します。上記のすべてのコマンドは、公式のMongoDBドキュメントを使用してさらに調査できます。
関連読書
MongoDBガイド
- MongoDB概要:MongoDBの使い方
- UbuntuとMacにMongoDBをインストールする方法
- MongoDBでデータベースを作成する
- MongoDBシェル基本コマンド
- MongoDB Compass:Mongo GUIの使用
- MongoDBのロールベースアクセス制御(RBAC)について
- MongoDBのプロジェクションとプロジェクションオペレーターについて
- MongoDBの集約関数について
- MongoDBのソート:sort()メソッドと例
- MongoDBでプッシュとプルオペレーターを使用する
- MongoDB $unwindの使い方
- 23の一般的なMongoDBクエリオペレーターとその使い方
- MongoDBのジオロケーションクエリの例
- MongoDBトランザクションの紹介
- MongoDBインデックス:主要なインデックスタイプとその管理方法
- トップMongoDBコマンドを知っておくべき
- MongoDBレプリケーション:完全な紹介
- MongoDBクラスタを設定する方法
- MongoDBシャーディング:概念、例、チュートリアル
- MongoDB Atlas:マネージドMongoDBの設定と使用
- MongoDBをDockerコンテナとして実行する方法
- MongoDBのメモリ使用量、管理、要件
- MongoDBバックアップ用のmongodumpの使い方
- MongoDBバックアップを復元するためのmongorestoreの例
- PyMongoの使い方
- MongoDBとNodeJSのためのMongooseの使い方
- MongoDBチートシート
- MongoDB対Cassandra:NoSQLデータベースの比較
- PostgreSQL対MongoDB:データベースの比較
- MySQL対MongoDB:データベースの比較
- MongoDB認定:紹介
これらの投稿は私自身のものであり、BMCの立場、戦略、または意見を必ずしも表すものではありません。