シェア

はじめに

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 に指示する必要があります。これらのドキュメントが作成されると、データベースが暗黙的に作成されます。

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 データベースを作成しました。また、equipment コレクション名で insert() コマンドを呼び出したため、データベース内に equipment コレクションも作成しました。最後に、insert() コマンドに入力した入力を使用して、equipment コレクション内に実際のドキュメントを作成します。

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

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

出力には、playground データベースがリストされたデータベースに含まれていること、equipment コレクションがリストされていること、equipement コレクション内に 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" ]

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

ダウンロードしたら、コレクションのリストなどのC# での読み取り操作を実行できます。

著者について
Justin Ellingwood

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。現在、ベルリンに妻と 2 羽のウサギと住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。