共有

はじめに

MongoDBは、データの保存、管理、処理にドキュメント指向の構造を使用します。個々のドキュメントコレクションに整理され、それがさらにデータベースに保存されます。各ドキュメントのスキーマは静的なスキーマで定義されていないため、ドキュメントベースのシステムは、テーブルとレコードで構成されるリレーショナルシステムよりも高い柔軟性を提供します。

このガイドでは、MongoDBがデータを整理するために使用する構造の作成と管理について説明します。データベースの作成と管理、そして類似または関連するドキュメントを保持するためのコレクションの作成方法について説明します。

既存のデータベースを表示する方法

新しいデータベースを作成し始める前に、MongoDBが既存のデータベースに関する情報を見つけるために提供しているいくつかのメソッドに慣れておくことは有益です。これにより、変更を加える前にシステムの現在の状態を理解するのに役立ちます。

アクセス権のあるシステム上のすべてのデータベースを表示するには、show dbsメソッドを使用します。

show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

MongoDBは、システム上のアクセス可能なすべてのデータベースの名前と、それらの現在のストレージスペースの概要を返します。

現在操作対象に設定されているデータベースを確認するには、db.getName()コマンド、またはそのショートハンドエイリアスであるdbを使用します。

db
test

show dbsコマンドでリストされなかったデータベースを現在使用している場合があります。これは、MongoDBでは、データベースに最初のドキュメントを書き込むまで、データベースは実際には作成されないためです。したがって、上記の出力例では、シェルはtestデータベースで操作する準備ができていますが、まだ存在しないため、show dbsコマンドでは返されません。

別のデータベースに切り替えるには、useコマンドを使用します。

use admin
switched to db admin

現在のデータベースに関する基本的な情報を取得するには、db.stats()メソッドを使用します。

db.stats()
{
"db" : "admin",
"collections" : 3,
"views" : 0,
"objects" : 4,
"avgObjSize" : 278.25,
"dataSize" : 1113,
"storageSize" : 86016,
"indexes" : 5,
"indexSize" : 147456,
"totalSize" : 233472,
"scaleFactor" : 1,
"fsUsedSize" : 2876923904,
"fsTotalSize" : 25832407040,
"ok" : 1
}

出力には、データベース内のコレクション数、ストレージ統計、インデックス情報などが表示されます。

データベースを作成する方法

MongoDBには、新しいデータベースを明示的に作成するコマンドはありません。代わりに、前述のように、新しいドキュメントを新しいデータベースに書き込みたいことをMongoDBに示す必要があります。これらのドキュメントが作成されると、データベースが暗黙的に作成されます。

新しいデータベースに書き込む準備をするには、useコマンドを発行して、存在しないデータベースに切り替えます。

ここでは、playgroundという新しいデータベースを作成するようにMongoDBを設定します。

use playground
switched to db playground

現在のデータベースを確認すると、playgroundデータベースが現在データベース関連コマンドのターゲットであることが確認されます。

db
playground

しかし、前述したように、まだドキュメントを作成していないため、データベース自体はまだ作成されていません。

show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

実際に新しいデータベースを作成するには、まず何かを作成する必要があります。

データベース内のコレクションを表示する方法

MongoDBでは、コレクションは、実装したい任意の分類システムを使用してドキュメントをグループ化するために使用される構造です。それらはデータベース内に存在し、ドキュメントを保存します。

現在使用しているデータベースで利用可能なコレクションは、show collectionsメソッドを使用して確認できます。

ここでは、デモンストレーションのためにいくつかのコレクションが利用可能なadminデータベースに切り替えます。

use admin
show collections
system.roles
system.users
system.version

あるいは、db.getCollectionNames()メソッドを使用して、同じコレクション名を配列で取得することもできます。

db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]

現在のデータベース内のコレクションに関する追加情報を表示するには、db.getCollectionInfos()メソッドを使用します。

db.getCollectionInfos()
[
{
"name" : "system.roles",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("776b1fd7-6014-4191-b33c-21350b590627")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
},
{
"name" : "system.users",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("8c824fd1-2150-4413-8fac-0b77d16505e5")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
},
{
"name" : "system.version",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]

オプションで、結果をフィルタリングするためにドキュメントをコマンドに渡すこともできます。例えば、system.versionコレクションの情報のみを表示したい場合は、次のように入力します。

db.getCollectionInfos(
{
name: "system.version"
}
)
[
{
"name" : "system.version",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]

コレクションに含まれるドキュメントの数を確認するには、db.<collection>.count()メソッドを使用します。例えば、以下のコマンドはsystem.usersコレクションにいくつのドキュメントがあるかを確認します。

db.system.users.count()
2

現在のデータベース内のコレクションに関する基本的な統計を表示するには、db.printCollectionStats()メソッドを使用します。

db.printCollectionStats()

このコマンドは、簡単に把握できる以上の情報を出力する可能性がありますが、コレクションの特性を詳しく調べる必要がある一部のシナリオでは役立ちます。

コレクションを作成する方法

新しいコレクションを作成するには、暗黙的または明示的に作成する2つのオプションがあります。

データベースと同様に、MongoDBはドキュメントが初めて書き込まれるときにコレクションを自動的に作成できます。この方法は、まだ存在しないコレクションにドキュメントを挿入することで、新しいコレクションを作成するようMongoDBに指示します。

例えば、先ほど関心を持っていたplaygroundデータベースに戻ることができます。そのネームスペースに入ったら、新しいコレクションに使用したい名前でinsert()コマンドを呼び出すことで、新しいドキュメントをコレクションに挿入できます。ここでは、equipmentという新しいコレクションにスライドに関するドキュメントを作成できます。

use playground
db.equipment.insert({name: "slide"})
switched to db playground
WriteResult({ "nInserted" : 1 })

出力は、1つのドキュメントが書き込まれたことを示しています。上記のコマンドは3つの別々の操作を実行しました。まず、MongoDBはuseコマンドで参照したplaygroundデータベースを作成しました。また、そのコレクション名でinsert()コマンドを呼び出したため、データベース内にequipmentコレクションも作成しました。最後に、insert()コマンドに提供した入力を使用して、equipmentコレクション内に実際のドキュメントを作成しました。

以下のコマンドで、これらのアクションがすべて実行されたことを確認できます。

show dbs
show collections
db.equipment.count()
db.equipment.find()

出力は、playgroundデータベースがリストされたデータベースに含まれていること、equipmentコレクションがリストされていること、equipmentコレクション内に1つのドキュメントがあること、そしてそのドキュメントがコマンドで挿入した{name: "slide"}ドキュメントであることを示すはずです。

コレクションを作成するもう1つのオプションは、db.createCollection()メソッドを明示的に使用することです。これにより、ドキュメントを追加せずにコレクションを作成できます。

例えば、playgroundデータベースにmaintenance.requestsという新しいコレクションを次のように入力して作成できます。

db.createCollection("maintenance.requests")
{ "ok" : 1 }

クエリを実行したときに新しいコレクションが表示されること、ただしドキュメントがないことを確認できます。

show collections
db.maintenance.requests.count()
equipment
maintenance.requests
0

db.createCollection()メソッドは、作成時にさまざまなオプションを指定できるため、主に役立ちます。例えば、キャップドコレクションを作成したい場合があります。これは、割り当てられたサイズに上限を設け、満杯になると最も古いドキュメントを削除することで維持するコレクションです。

最大10240バイトの情報を保存できるnotificationsというキャップドコレクションを作成するには、次のように呼び出すことができます。

db.createCollection(
"notifications",
{
capped: true,
size: 10240
}
)
{ "ok" : 1}

これによりキャップドコレクションnotificationが作成されます。これは、次のように入力して確認できます。

db.getCollecitonInfos({"options.capped": true})
[
{
"name" : "notifications",
"type" : "collection",
"options" : {
"capped" : true,
"size" : 10240
},
"info" : {
"readOnly" : false,
"uuid" : UUID("dff7bfb0-1cfc-4170-ba60-fbb834ac6925")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]

コレクションを削除する方法

コレクションを削除するには、コレクション自体に対してdrop()メソッドを使用します。

例えば、作成したキャップドコレクションnotificationsを削除するには、次のように入力します。

db.notifications.drop()
true

現在のデータベース内のコレクションを再度リストすることで、操作が成功したことを確認できます。

show collections
equipment
maintenance.requests

データベースを削除する方法

データベース全体を削除するには、db.dropDatabase()コマンドを呼び出します。これにより現在のデータベースが削除されるため、実行する前に正しいデータベースにいることを確認してください。

use playground
db.dropDatabase()
switched to db playground
{ "dropped" : "playground", "ok" : 1 }

利用可能なデータベースのリストを確認すると、playgroundは表示されなくなります。

show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

まだ新しいデータベースに切り替えていないため、新しいコレクションやドキュメントを追加することを選択した場合、MongoDBは依然としてplaygroundデータベースを作成するように設定されています。dbコマンドでこれを確認できます。

db
playground

まとめ

MongoDBを使用する上で、データベースとコレクションの作成および管理は重要なスキルです。これらの基本的な整理ツールを使用すると、関連するドキュメントをグループ化したり、情報のサブセットをクエリしたり、さまざまな種類のデータに対して認可ポリシーを設定したりできます。これらの構造を効果的に管理する方法に慣れることで、予期せぬ事態を減らし、データをより効果的に管理できるようになります。

FAQ

はい、MongoDBのデータベース内に複数のコレクションを持つことができます。コレクションは、リレーショナルデータベースにおけるテーブルに類似していると考えることができます。

MongoDBには、すべてのデータベースを削除する単一のコマンドはありませんが、スクリプトまたは一連のクエリを使用すれば可能です。

データベースを削除する基本的な構文は次のようになります。

use playground
db.dropDatabase()

MongoDBでコレクションの名前を変更するには、renameCollection()メソッドを使用できます。

基本的な構文は次のようになります。

db.collectionName.renameCollection("new collection name")

ここで、collectionNameは現在のコレクション名であり、"new collection name"は希望する変更後の名前です。

作業中のデータベースで利用可能なすべてのコレクションは、show collectionsメソッドを使用して表示できます。

また、adminデータベース内のすべてのコレクションを表示したい場合、基本的な構文は次のようになります。

use admin
show collections

あるいは、db.getCollectionNames()メソッドを使用して、同じ結果を配列で取得することもできます。

db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]

C#でMongoDBを使用するには、C#の互換性のあるドライバーバージョンをダウンロードする必要があります。

ダウンロードが完了すると、コレクションのリスト表示など、C#での読み取り操作を実行できるようになります。

著者について
Justin Ellingwood

ジャスティン・エリイングウッド

ジャスティンは2013年からデータベース、Linux、インフラストラクチャ、開発者ツールについて執筆しています。現在はベルリンで妻と2匹のウサギと暮らしています。通常、三人称で書く必要がないため、関係者全員にとって安心です。
© 2025 prisma.dokyumento.jp. All rights reserved.