接続と基本操作
mongo
シェルへの接続方法と、接続後の基本的な操作コマンドです。
コマンド/メソッド | 説明 | 使用例 |
---|---|---|
mongo | MongoDB インスタンスに接続します。ホスト、ポート、認証情報などを指定できます。 | |
show dbs | サーバー上のすべてのデータベースのリストを表示します。 | |
use <database> | 作業対象のデータベースを切り替えます。指定したデータベースが存在しない場合は、最初のデータ挿入時に作成されます。 | |
db | 現在選択されているデータベースオブジェクトを表示します。 | |
show collections | 現在のデータベース内のすべてのコレクションを表示します。 | |
db.version() | 接続している MongoDB サーバーのバージョンを表示します。 | |
db.serverStatus() | MongoDB サーバーの状態に関する詳細情報を表示します (接続数、メモリ使用量、ネットワーク情報など)。 | |
db.stats() | 現在のデータベースの統計情報(データサイズ、ストレージサイズ、オブジェクト数、インデックス数など)を表示します。 | |
help | mongo シェルで使用可能なコマンドやメソッドのヘルプ情報を表示します。 | |
db.collection.help() | 指定したコレクションオブジェクトで使用可能なメソッドのヘルプを表示します。 | |
cls / clear | シェルの画面をクリアします。 | |
exit / quit() | mongo シェルを終了します。Ctrl+C を2回押すことでも終了できます。 | |
load("path/to/script.js") | 指定した JavaScript ファイルを読み込んで実行します。複雑な操作や繰り返し処理をスクリプト化するのに便利です。 |
データベース操作
データベースの作成、削除、状態確認などに関連する操作です。
コマンド/メソッド | 説明 | 使用例 |
---|---|---|
use <database> | データベースを選択または作成します。データベースは、最初のコレクションまたはドキュメントが挿入されるまで実際には作成されません。 | |
db.dropDatabase() | 現在選択しているデータベースを完全に削除します。注意: この操作は元に戻せません。 | |
db.getName() | 現在選択しているデータベースの名前を取得します。 | |
db.getCollectionNames() | 現在のデータベースに存在するコレクション名の配列を取得します。show collections と似ていますが、結果をプログラムで扱いやすい形式で返します。 | |
db.copyDatabase(fromdb, todb, fromhost) | 別のデータベースの内容を現在のデータベースにコピーします。主に異なる MongoDB インスタンス間でデータをコピーする際に使用します。 | このコマンドは非推奨 (deprecated) となっており、将来のバージョンで削除される可能性があります。代わりに |
db.cloneDatabase(fromhost) | 別の MongoDB インスタンスから現在のデータベースを複製(クローン)します。コピー元のデータベース名は現在のデータベース名と同じである必要があります。 | このコマンドも非推奨です。 |
コレクション操作
コレクション(RDB のテーブルに相当)の作成、削除、リネームなどに関する操作です。
コマンド/メソッド | 説明 | 使用例 |
---|---|---|
db.createCollection("name", options) | 明示的にコレクションを作成します。ドキュメント挿入時にも暗黙的に作成されますが、Capped Collection やバリデーションルールを指定する場合はこのメソッドを使用します。 | |
db.collection.drop() | 指定したコレクションを削除します。関連するインデックスもすべて削除されます。注意: この操作は元に戻せません。 | |
db.collection.renameCollection("newName", dropTarget) | コレクションの名前を変更します。dropTarget が true の場合、変更先の名前のコレクションが既に存在すれば上書きします(デフォルトは false で、存在する場合はエラー)。 | シャーディング環境では、この操作には制限があります。 |
db.getCollection("name") | 指定された名前のコレクションオブジェクトを取得します。コレクション名にハイフンなどの特殊文字が含まれる場合に便利です。 | |
db.collection.stats() | コレクションの統計情報(ドキュメント数、サイズ、インデックス情報など)を表示します。 | |
db.collection.storageSize() | コレクションがディスク上で占めるストレージサイズ(バイト単位)を返します。 | |
db.collection.totalSize() | コレクションのデータサイズとインデックスサイズの合計(バイト単位)を返します。 | |
db.collection.validate({full: true}) | コレクションの内部構造を検証し、破損や不整合がないかチェックします。full: true オプションはより詳細なチェックを行いますが、時間がかかる場合があります。 | |
db.collection.convertToCapped(sizeInBytes) | 既存の非 Capped Collection を Capped Collection に変換します。変換後のサイズをバイト単位で指定します。 | この操作はコレクションをロックするため、実行中は書き込みがブロックされる可能性があります。 |
ドキュメント操作 (CRUD)
コレクション内のドキュメント(RDB の行に相当)に対する基本的な作成 (Create)、読み取り (Read)、更新 (Update)、削除 (Delete) 操作です。
作成 (Create)
メソッド | 説明 | 使用例 |
---|---|---|
db.collection.insertOne(document, options) | 単一のドキュメントをコレクションに挿入します。_id フィールドが指定されていない場合、自動的に ObjectId が生成されます。 | |
db.collection.insertMany(documents, options) | 複数のドキュメントを配列として受け取り、一括で挿入します。ordered: false オプションを指定すると、挿入エラーが発生しても残りのドキュメントの挿入を試みます(デフォルトは true で、エラー発生時に停止)。 | |
db.collection.insert(documentOrArray, options) | 単一または複数のドキュメントを挿入します。古いメソッドですが、後方互換性のために残されています。insertOne() または insertMany() の使用が推奨されます。 | このメソッドは非推奨です。 |
db.collection.save(document, options) | ドキュメントを挿入または更新します。ドキュメントに _id が存在し、その _id がコレクション内に既に存在する場合は更新 (upsert)、存在しない場合または _id がない場合は挿入します。 | このメソッドも非推奨に近いです。挿入には |
読み取り (Read)
メソッド | 説明 | 使用例 |
---|---|---|
db.collection.find(query, projection) | 指定したクエリ条件に一致するドキュメントを検索し、カーソルを返します。projection で返すフィールドを指定できます。 | |
db.collection.findOne(query, projection) | 指定したクエリ条件に一致する最初のドキュメントを検索し、そのドキュメントを返します。一致するドキュメントがない場合は null を返します。 | |
カーソルメソッド (limit() , skip() , sort() , count() , pretty() ) | find() が返すカーソルに対して、結果の件数制限、スキップ、ソート、件数取得、整形表示などを行います。メソッドチェーンで繋げて使用します。 | |
db.collection.countDocuments(query, options) | クエリ条件に一致するドキュメントの正確な数をカウントします。大規模なコレクションでは estimatedDocumentCount() より遅くなる可能性があります。 | |
db.collection.estimatedDocumentCount(options) | コレクション内の全ドキュメント数を、メタデータを使用して高速に推定します。クエリ条件は指定できません。シャットダウンが正常に行われなかった場合など、正確でない可能性があります。 | |
db.collection.distinct(field, query, options) | 指定したフィールドについて、重複しない値のリストを返します。クエリで対象ドキュメントを絞り込むことも可能です。 |
更新 (Update)
既存のドキュメントを変更する操作です。更新演算子 ($set
, $inc
, $push
など) を使用してフィールド値を変更します。
主な更新演算子:
$set
: 指定したフィールドの値を設定または更新します。フィールドが存在しない場合は作成します。$unset
: 指定したフィールドを削除します。$inc
: 指定したフィールドの値を指定した量だけ増減させます (数値フィールドのみ)。フィールドが存在しない場合は作成して指定した量に設定します。$mul
: 指定したフィールドの値に指定した数値を乗算します (数値フィールドのみ)。$rename
: フィールド名を変更します。$min
: 指定した値がフィールドの現在の値より小さい場合にフィールドの値を更新します。$max
: 指定した値がフィールドの現在の値より大きい場合にフィールドの値を更新します。$currentDate
: フィールドの値を現在の日付またはタイムスタンプに設定します。$push
: 配列フィールドの末尾に要素を追加します。$addToSet
: 配列フィールドに要素が存在しない場合のみ追加します (重複を防ぐ)。$pull
: 配列フィールドから条件に一致するすべての要素を削除します。$pop
: 配列フィールドの先頭 (-1
) または末尾 (1
) の要素を削除します。
メソッド | 説明 | 使用例 |
---|---|---|
db.collection.updateOne(filter, update, options) | フィルタ条件に一致する最初のドキュメントを更新します。update ドキュメントには更新演算子を使用します。options で upsert: true を指定すると、一致するドキュメントがない場合に新しいドキュメントを挿入します。 | |
db.collection.updateMany(filter, update, options) | フィルタ条件に一致するすべてのドキュメントを更新します。update ドキュメントには更新演算子を使用します。options で upsert: true も指定できますが、通常は複数ドキュメントを対象とするため、意図しない挿入が起こる可能性があります。 | |
db.collection.replaceOne(filter, replacement, options) | フィルタ条件に一致する最初のドキュメント全体を、指定した replacement ドキュメントで置き換えます。_id フィールドは変更できません。更新演算子は使用できません。options で upsert: true を指定すると、一致するドキュメントがない場合に新しいドキュメントを挿入します。 | |
db.collection.update(query, update, options) | 古い更新メソッド。デフォルトでは条件に一致する最初のドキュメントのみを更新します。複数ドキュメントを更新するには multi: true オプションが必要です。upsert: true も指定可能です。 | このメソッドは非推奨です。 |
db.collection.findAndModify(query, sort, remove, update, new, fields, upsert, ...) | ドキュメントを検索し、それを変更または削除してから、元のドキュメントまたは変更後のドキュメントをアトミックに返します。非常に多機能ですが、複雑です。 |
|
db.collection.findOneAndUpdate(filter, update, options) | フィルタに一致する最初のドキュメントを検索し、更新して、更新前または更新後のドキュメントを返します。options には projection , sort , upsert , returnNewDocument (または returnOriginal ) などが含まれます。 | |
db.collection.findOneAndReplace(filter, replacement, options) | フィルタに一致する最初のドキュメントを検索し、指定されたドキュメントで置き換えて、置換前または置換後のドキュメントを返します。options は findOneAndUpdate と同様です。 |
削除 (Delete)
メソッド | 説明 | 使用例 |
---|---|---|
db.collection.deleteOne(filter, options) | フィルタ条件に一致する最初のドキュメントを削除します。 | |
db.collection.deleteMany(filter, options) | フィルタ条件に一致するすべてのドキュメントを削除します。注意: フィルタを空 ({} ) にすると、コレクション内のすべてのドキュメントが削除されます。 | |
db.collection.remove(query, optionsOrJustOne) | 古い削除メソッド。デフォルトでは条件に一致するすべてのドキュメントを削除します。単一のドキュメントのみを削除するには justOne: true (またはオプションオブジェクトの代わりに true ) を指定します。 | このメソッドは非推奨です。 |
db.collection.findOneAndDelete(filter, options) | フィルタに一致する最初のドキュメントを検索し、削除して、削除されたドキュメントを返します。options には projection , sort などが含まれます。 |
インデックス操作
クエリのパフォーマンスを向上させるためのインデックスの作成、表示、削除に関する操作です。
メソッド | 説明 | 使用例 |
---|---|---|
db.collection.createIndex(keys, options) | 指定されたフィールドにインデックスを作成します。keys にはフィールド名とインデックスの方向 (1 : 昇順, -1 : 降順) を指定します。options でインデックス名、ユニーク制約、TTL (Time-To-Live) などを設定できます。 | |
db.collection.getIndexes() | コレクションに存在するすべてのインデックスの情報を配列として返します。 | |
db.collection.dropIndex(index) | 指定されたインデックスを削除します。インデックスは名前 (文字列) またはキードキュメントで指定します。 | |
db.collection.dropIndexes() | コレクションの _id インデックスを除く、すべてのインデックスを削除します。 | |
db.collection.reIndex() | コレクションのすべてのインデックスを再構築します。通常、ディスク容量の回収やパフォーマンス問題の解決のために使用されますが、時間がかかる可能性があります。 | この操作はコレクションをロックする可能性があり、通常はメンテナンスウィンドウでの実行が推奨されます。 |
db.collection.totalIndexSize() | コレクションのすべてのインデックスがディスク上で占める合計サイズ(バイト単位)を返します。 |
集計 (Aggregation) フレームワーク
複数のドキュメントを処理し、計算された結果を返すための強力なフレームワークです。パイプライン形式で複数のステージ ($match
, $group
, $sort
, $project
など) を連結して使用します。
主な集計パイプラインステージ:
$match
: ドキュメントをフィルタリングします (find()
のクエリと同様)。パイプラインの早い段階で使用すると効率的です。$group
: 指定したキーでドキュメントをグループ化し、各グループに対して集計処理 (合計、平均、最大、最小など) を行います。$project
: 出力ドキュメントのフィールド reshaping (選択、除外、名前変更、計算フィールド追加) を行います。$sort
: ドキュメントをソートします。$limit
: パイプラインを通過するドキュメント数を制限します。$skip
: 指定された数のドキュメントをスキップします。$unwind
: 配列フィールドの各要素を個別のドキュメントとして展開します。$lookup
: 別のコレクションと結合 (LEFT OUTER JOIN に似た操作) を行います。$out
: パイプラインの結果を新しいコレクションに出力します。$merge
: パイプラインの結果を既存または新しいコレクションにマージ (挿入、更新、置換) します。$addFields
/$set
: ドキュメントに新しいフィールドを追加または上書きします ($set
は$addFields
のエイリアス)。$count
: パイプラインのそのステージに到達したドキュメント数をカウントし、指定された名前のフィールドに格納します。$sortByCount
: 指定されたフィールドの値でグループ化し、各値の出現回数をカウントして、カウント数の降順でソートします。
メソッド/ステージ | 説明 | 使用例 |
---|---|---|
db.collection.aggregate(pipeline, options) | 集計パイプラインを実行します。pipeline はステージオブジェクトの配列です。 | |
Explain() (集計用) | 集計パイプラインの実行計画を表示します。パフォーマンスチューニングに役立ちます。aggregate() の後ろに付けます。 |
ユーザーとロール管理
データベースへのアクセス制御を行うためのユーザー作成、ロール割り当て、権限管理に関する操作です。通常、admin
データベースで実行しますが、特定のデータベースに対してユーザーを作成することも可能です。
認証が有効になっている必要があります。
コマンド/メソッド | 説明 | 使用例 |
---|---|---|
db.createUser(user, writeConcern) | 新しいユーザーを作成します。ユーザー名、パスワード、所属するデータベースとロールを指定します。 | |
db.updateUser(username, update, writeConcern) | 既存のユーザー情報を更新します。パスワード変更、ロールの追加/削除、カスタムデータの更新などが可能です。 | |
db.changeUserPassword(username, password, writeConcern) | ユーザーのパスワードを変更するための専用メソッドです。updateUser でも可能ですが、こちらの方が意図が明確です。 | |
db.dropUser(username, writeConcern) | 指定したユーザーを現在のデータベースから削除します。 | |
db.dropAllUsers(writeConcern) | 現在のデータベースからすべてのユーザーを削除します。注意: 非常に危険な操作です。 | |
db.getUser(username, args) | 指定したユーザーの詳細情報を取得します。 | |
db.getUsers(filter) | 現在のデータベースに定義されているユーザーのリストを取得します。 | |
db.createRole(role, writeConcern) | カスタムロールを作成します。ロール名、継承するロール、実行可能な権限 (privileges) を定義します。 | |
db.updateRole(rolename, update, writeConcern) | 既存のカスタムロールを更新します。権限の追加/削除、継承ロールの変更などが可能です。 | |
db.dropRole(rolename, writeConcern) | 指定したカスタムロールを現在のデータベースから削除します。 | |
db.dropAllRoles(writeConcern) | 現在のデータベースからすべてのユーザー定義ロールを削除します。注意: 組み込みロールは削除されません。 | |
db.getRole(rolename, args) | 指定したロールの詳細情報を取得します。 | |
db.getRoles(filter) | 現在のデータベースに定義されているロールのリストを取得します。showBuiltinRoles: true で組み込みロールも表示できます。 | |
db.grantRolesToUser(username, roles, writeConcern) | 既存のユーザーにロールを追加します。 | |
db.revokeRolesFromUser(username, roles, writeConcern) | ユーザーからロールを削除します。 | |
db.grantPrivilegesToRole(rolename, privileges, writeConcern) | 既存のカスタムロールに権限を追加します。 | |
db.revokePrivilegesFromRole(rolename, privileges, writeConcern) | カスタムロールから権限を削除します。 | |
db.auth(username, password) | 現在のデータベースに対してユーザー認証を行います。mongo コマンドで接続時に認証情報を指定しなかった場合などに使用します。 | |
db.logout() | 現在の接続の認証セッションを終了します。 |
レプリカセット/シャーディング関連
レプリカセットやシャーディングクラスタの状態確認や管理に関連する基本的なコマンドです。詳細な設定や管理は専用のコマンドやメソッドを使用します。
コマンド/メソッド | 説明 | 使用例 |
---|---|---|
rs.status() | 接続しているレプリカセットの状態を表示します。メンバーの状態 (PRIMARY, SECONDARY, ARBITER など)、ヘルス、同期遅延などの情報が含まれます。mongod がレプリカセットのメンバーである場合にのみ有効です。 | |
rs.conf() | レプリカセットの設定オブジェクトを表示します。メンバーのホスト名、優先度、投票権などの設定が含まれます。 | |
rs.initiate(config) | 新しいレプリカセットを初期化します。引数に設定オブジェクトを指定します。通常、最初のメンバーで一度だけ実行します。 | |
rs.add(hostport, arbiterOnly) | 既存のレプリカセットに新しいメンバーを追加します。hostport は “hostname:port” 形式の文字列です。arbiterOnly を true にするとアービターとして追加します。 | |
rs.remove(hostport) | レプリカセットからメンバーを削除します。 | |
rs.reconfig(config, force) | レプリカセットの設定を更新します。rs.conf() で取得した設定を変更して渡します。force: true は現在のプライマリが設定内のメンバーと一致しない場合に強制的に再設定しますが、危険な場合があります。 | |
rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs) | 現在のプライマリノードに、自発的にプライマリを辞任させ、セカンダリに降格させます。これにより新しいプライマリが選出されます。メンテナンスなどに使用します。 | |
rs.freeze(secs) | 指定された秒数間、現在のノードがプライマリに選出されるのを防ぎます。 | |
rs.syncFrom(hostport) | 現在のセカンダリノードが、指定された他のレプリカセットメンバーからデータを同期するように指示します。同期ソースを手動で変更する場合に使用します。 | |
sh.status(verbose) | シャーディングクラスタの状態を表示します。シャード情報、バランサーの状態、チャンク情報などが含まれます。mongos プロセスに接続している場合にのみ有効です。verbose: true で詳細情報を表示します。 | |
sh.addShard(shardURL, name) | シャーディングクラスタに新しいシャードを追加します。shardURL はレプリカセット名/ホスト:ポート形式 (例: “rs0/mongo1:27018,mongo2:27018”) またはスタンドアロンインスタンスのホスト:ポート形式です。 | |
sh.enableSharding(database) | 指定したデータベースに対してシャーディングを有効にします。 | |
sh.shardCollection(namespace, key, unique, options) | 指定したコレクションをシャーディングします。namespace は “database.collection” 形式、key はシャードキーを指定するドキュメントです。 | |
sh.removeShard(shardName) | クラスタからシャードを削除するプロセスを開始します。シャード内のデータが他のシャードに移動 (ドレイン) されるため、時間がかかります。 | シャードの削除は複雑なプロセスです。 |
sh.startBalancer(timeout, interval) / sh.stopBalancer(timeout) | チャンクバランサーを開始または停止します。バランサーはシャード間でチャンクを自動的に移動させ、データ分散を均等に保ちます。 | |
sh.getBalancerState() / sh.isBalancerRunning() | チャンクバランサーが現在有効かどうか、実行中かどうかを確認します。 | |
sh.moveChunk(namespace, query, toShard) | 指定した名前空間 (コレクション) の特定のチャンクを手動で別のシャードに移動します。query はチャンク内の一意なドキュメントを特定するための条件、toShard は移動先のシャード名です。 | 通常、チャンクの移動はバランサーに任せるべきです。手動での移動は特別な場合に限られます。 |
その他便利なコマンド
上記カテゴリに含まれない、診断や情報取得に役立つコマンドです。
コマンド/メソッド | 説明 | 使用例 |
---|---|---|
db.collection.explain(verbosity) | クエリ (find , update , remove , aggregate など) の実行計画を表示します。インデックスの使用状況やパフォーマンスボトルネックの特定に不可欠です。verbosity には “queryPlanner”, “executionStats”, “allPlansExecution” を指定できます。 | |
db.currentOp(arg) | 現在 MongoDB インスタンスで実行中の操作に関する情報を表示します。長時間実行されているクエリやロック競合の調査に役立ちます。 | |
db.killOp(opid) | 指定された操作 ID (opid ) の操作を強制終了します。db.currentOp() で opid を確認できます。注意: 実行中の操作を中断させるため、慎重に使用してください。 | |
db.setProfilingLevel(level, slowms) | データベースプロファイラのレベルを設定します。
slowms はミリ秒単位の閾値です (デフォルト 100ms)。プロファイル結果は system.profile コレクションに記録されます。 | |
db.getProfilingStatus() | 現在のプロファイリングレベルと閾値 (slowms) を表示します。 | |
db.system.profile.find() | プロファイラによって記録された情報を表示します (プロファイリングが有効な場合)。 |
|
db.setSecondaryOk() / rs.secondaryOk() | 現在の接続でセカンダリノードからの読み取りを許可します。デフォルトではプライマリからのみ読み取ります。レプリカセット環境で使用します。 | |
ObjectId() | 新しい ObjectId を生成します。ドキュメントの _id のデフォルト値です。 | |
ISODate() | ISO 8601 形式の日付文字列から Date オブジェクトを生成します。日付/時刻のクエリや挿入に便利です。 |