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 に指示する必要があります。これらのドキュメントが作成されると、データベースが暗黙的に作成されます。
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
データベースを作成しました。また、equipment
コレクション名で insert()
コマンドを呼び出したため、データベース内に equipment
コレクションも作成しました。最後に、insert()
コマンドに入力した入力を使用して、equipment
コレクション内に実際のドキュメントを作成します。
これらのすべてのアクションが実行されたことを、次のコマンドで確認できます。
show dbsshow collectionsdb.equipment.count()db.equipment.find()
出力には、playground
データベースがリストされたデータベースに含まれていること、equipment
コレクションがリストされていること、equipement
コレクション内に 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" ]
MongoDB を C# で使用するには、互換性のあるドライバーの C# バージョンをダウンロードする必要があります。
ダウンロードしたら、コレクションのリストなどのC# での読み取り操作を実行できます。