MongoDB
MongoDBでデータベースとコレクションを管理する方法
はじめに
MongoDBは、データの保存、管理、処理にドキュメント指向の構造を使用します。個々のドキュメントはコレクションに整理され、それがさらにデータベースに保存されます。各ドキュメントのスキーマは静的なスキーマで定義されていないため、ドキュメントベースのシステムは、テーブルとレコードで構成されるリレーショナルシステムよりも高い柔軟性を提供します。
このガイドでは、MongoDBがデータを整理するために使用する構造の作成と管理について説明します。データベースの作成と管理、そして類似または関連するドキュメントを保持するためのコレクションの作成方法について説明します。
MongoDBを使用している場合は、PrismaのMongoDBコネクタをぜひお試しください!Prisma Clientを使用すると、本番環境のMongoDBデータベースを安心して管理できます。
MongoDBとPrismaでの作業を始めるには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法をご確認ください。
既存のデータベースを表示する方法
新しいデータベースを作成し始める前に、MongoDBが既存のデータベースに関する情報を見つけるために提供しているいくつかのメソッドに慣れておくことは有益です。これにより、変更を加える前にシステムの現在の状態を理解するのに役立ちます。
アクセス権のあるシステム上のすべてのデータベースを表示するには、show dbs
メソッドを使用します。
show dbs
admin 0.000GBconfig 0.000GBlocal 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.000GBconfig 0.000GBlocal 0.000GB
実際に新しいデータベースを作成するには、まず何かを作成する必要があります。
データベース内のコレクションを表示する方法
MongoDBでは、コレクションは、実装したい任意の分類システムを使用してドキュメントをグループ化するために使用される構造です。それらはデータベース内に存在し、ドキュメントを保存します。
現在使用しているデータベースで利用可能なコレクションは、show collections
メソッドを使用して確認できます。
ここでは、デモンストレーションのためにいくつかのコレクションが利用可能なadmin
データベースに切り替えます。
use adminshow collections
system.rolessystem.userssystem.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 playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
出力は、1つのドキュメントが書き込まれたことを示しています。上記のコマンドは3つの別々の操作を実行しました。まず、MongoDBはuse
コマンドで参照したplayground
データベースを作成しました。また、そのコレクション名でinsert()
コマンドを呼び出したため、データベース内にequipment
コレクションも作成しました。最後に、insert()
コマンドに提供した入力を使用して、equipment
コレクション内に実際のドキュメントを作成しました。
以下のコマンドで、これらのアクションがすべて実行されたことを確認できます。
show dbsshow collectionsdb.equipment.count()db.equipment.find()
出力は、playground
データベースがリストされたデータベースに含まれていること、equipment
コレクションがリストされていること、equipment
コレクション内に1つのドキュメントがあること、そしてそのドキュメントがコマンドで挿入した{name: "slide"}
ドキュメントであることを示すはずです。
コレクションを作成するもう1つのオプションは、db.createCollection()
メソッドを明示的に使用することです。これにより、ドキュメントを追加せずにコレクションを作成できます。
例えば、playground
データベースにmaintenance.requests
という新しいコレクションを次のように入力して作成できます。
db.createCollection("maintenance.requests")
{ "ok" : 1 }
クエリを実行したときに新しいコレクションが表示されること、ただしドキュメントがないことを確認できます。
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
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
equipmentmaintenance.requests
データベースを削除する方法
データベース全体を削除するには、db.dropDatabase()
コマンドを呼び出します。これにより現在のデータベースが削除されるため、実行する前に正しいデータベースにいることを確認してください。
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
利用可能なデータベースのリストを確認すると、playground
は表示されなくなります。
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
まだ新しいデータベースに切り替えていないため、新しいコレクションやドキュメントを追加することを選択した場合、MongoDBは依然としてplayground
データベースを作成するように設定されています。db
コマンドでこれを確認できます。
db
playground
まとめ
MongoDBを使用する上で、データベースとコレクションの作成および管理は重要なスキルです。これらの基本的な整理ツールを使用すると、関連するドキュメントをグループ化したり、情報のサブセットをクエリしたり、さまざまな種類のデータに対して認可ポリシーを設定したりできます。これらの構造を効果的に管理する方法に慣れることで、予期せぬ事態を減らし、データをより効果的に管理できるようになります。
MongoDBを使用している場合は、PrismaのMongoDBコネクタをぜひお試しください!Prisma Clientを使用すると、本番環境のMongoDBデータベースを安心して管理できます。
MongoDBとPrismaでの作業を始めるには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法をご確認ください。
FAQ
はい、MongoDBのデータベース内に複数のコレクションを持つことができます。コレクションは、リレーショナルデータベースにおけるテーブルに類似していると考えることができます。
MongoDBには、すべてのデータベースを削除する単一のコマンドはありませんが、スクリプトまたは一連のクエリを使用すれば可能です。
データベースを削除する基本的な構文は次のようになります。
use playgrounddb.dropDatabase()
MongoDBでコレクションの名前を変更するには、renameCollection()
メソッドを使用できます。
基本的な構文は次のようになります。
db.collectionName.renameCollection("new collection name")
ここで、collectionName
は現在のコレクション名であり、"new collection name"
は希望する変更後の名前です。
作業中のデータベースで利用可能なすべてのコレクションは、show collections
メソッドを使用して表示できます。
また、admin
データベース内のすべてのコレクションを表示したい場合、基本的な構文は次のようになります。
use adminshow collections
あるいは、db.getCollectionNames()
メソッドを使用して、同じ結果を配列で取得することもできます。
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
C#でMongoDBを使用するには、C#の互換性のあるドライバーバージョンをダウンロードする必要があります。
ダウンロードが完了すると、コレクションのリスト表示など、C#での読み取り操作を実行できるようになります。