MongoDB
MongoDBとは?
MongoDBとは?
MongoDBはオープンソースのドキュメント指向NoSQLデータベースシステムです。データはJavaScript Object Notation (JSON) に似た構造で保存され、データの保存時に指定できます。
各ドキュメントは、必要に応じてどれだけでも複雑な独自の構造を持つことができます。MongoDBは、データをプログラムまたは対話形式で管理およびクエリするための非SQLメソッドとコマンドを提供します。MongoDBは、高速なパフォーマンス、スケーラビリティ、迅速な開発ペースを可能にすることで知られています。
MongoDBを使用している場合は、PrismaのMongoDBコネクタをチェックしてください!Prisma Clientを使用すると、本番環境のMongoDBデータベースを安心して管理できます。
MongoDBとPrismaでの作業を開始するには、ゼロからの入門ガイド、または既存のプロジェクトに追加する方法をチェックしてください。
誕生の経緯
MongoDBは2007年にDwight Merriman、Eliot Horowitz、Kevin Ryanによって設立されました。彼らは以前、毎秒40万件の広告を配信するインターネット広告会社で働いていました。
チームはこのトラフィックに対応するために多くのカスタムデータストアを開発していましたが、スケーラビリティとアジリティに関する問題に頻繁に遭遇し、これがこれらの問題を解決するデータベースを作成するというインスピレーションにつながりました。そして、MongoDBが誕生しました。
仕組み
より良いスケーラビリティとアジリティを実現するため、MongoDBはJSONの派生形であるバイナリJSON、つまりBSONを使用しています。BSONはJSONよりも多くのデータ型に対応しており、MongoDBに保存できるデータの種類に柔軟性をもたらします。
MongoDBのデータ構造
行と列で構成されるテーブルではなく、MongoDBにはドキュメントで構成されるコレクションがあります。ドキュメントはフィールドと値のペアで構成されます。リレーショナルデータベースと比較して、MongoDBデータベースを構成する要素は次のようにざっくりと考えることができます。
リレーショナル | ドキュメント | |
---|---|---|
テーブル | = | コレクション |
行 | = | ドキュメント |
列 | = | フィールド |
基本的な構造は次のようになります。
{field1: value1,field2: value2,field3: value3,...fieldN: valueN}
ドキュメントはJSONオブジェクトと非常によく似ています。ドキュメントは、利用可能なBSONデータ型だけでなく、他のドキュメント、配列、ドキュメントの配列も保持できます。このJSON形式は、ほとんどの現代のプログラミング言語のネイティブオブジェクトに直接マッピングされるため、開発者にとって自然な選択肢となります。
例は次のようになります。
var mydoc = {_id: ObjectId("5099803df3f4948bd2f98391"),name: { first: "James", last: "Joyce" },birth: new Date('Feb 02, 1882'),death: new Date('Jan 14, 1941'),books: [ "Ulysses", "Dubliners","Finnegan's Wake" ],sales : NumberLong(1250000)}
_id
には[ObjectId].name
にはfirst
とlast
のフィールドを含む埋め込みドキュメントが保持されます。birth
とdeath
には[Date]型の値が保持されます。books
には[strings].- の配列が保持されます。
sales
には[NumberLong]型の値が保持されます。
型の値が保持されます。データモデルによっては、ジェイムズ・ジョイスとその著作に関するすべての情報を単一のドキュメントに格納するのではなく、リレーショナルデータベースではauthor
テーブルとbook
テーブルがあり、これらがauthor_id
のようなもので結合される可能性があります。
この特定のシンプルなユースケースでは、ドキュメントモデルはデータアクセスを簡素化し、一緒にアクセスされるデータを一緒に格納します。
MongoDBドキュメント vs SQLテーブルレコード
前の例をさらに拡張して、MongoDBのドキュメントがリレーショナルデータベースの同じレコードとどのように異なるかを見てみましょう。リレーショナルデータベースでは、レコードを格納するテーブルは次のようになります。
primary_key | first_name | last_name | age | email | phone_number |----------- | ---------- | --------- | --- | -------------------- | ------------ |1 | Tom | Brown | 38 | tom.b@email.com | 555-3802 |2 | Sarah | Green | 84 | (NULL) | 555-8088 |3 | Sam | White | 22 | sammi@123.org | 555-1234 |
一方、前述の著者ドキュメントで見たように、MongoDBの類似のドキュメントコレクションは、JSONで次のようにモデル化される場合があります。
{primary_key: 1,first_name: "Tom",last_name: "Brown",age: 38,email_address: "tom.b@email.com",phone_number: "555-3802"},{primary_key: 2,first_name: "Sarah",last_name: "Green",age: 84,phone_number: "555-8088"},{primary_key: 3,first_name: "Sam",last_name: "White",age: 22,email_address: "sammi@123.org",phone_number: "555-1234",notes: ["High value customer","Has a dog named Fido"]}
ドキュメントデータベースとリレーショナルデータベースのどちらを選ぶかは、データベースが格納するデータの種類と、そのデータにどのようにアクセスすべきかにかかっています。MongoDBのドキュメントは、厳密性よりも柔軟性を重視し、アプリケーションからのデータアクセス方法を簡素化します。
MongoDBクエリ言語
MongoDBデータベースはドキュメント指向であるため、データは通常、リレーショナルデータベースのように事前に定義されたスキーマに従いません。これにより、構造化クエリ言語(SQL)でリレーショナルデータベースをクエリする場合とはデータへのアクセス方法が異なります。MongoDBには、単純にMongoDBクエリ言語(MQL)と呼ばれる独自のクエリ言語があります。
SQLと同様に、MQLもユーザーが特定の仕様に基づいてデータにアクセスすることを可能にします。ニーズに関連する条件に一致するドキュメントを返すように制御できます。このガイドではMongoDBでのクエリの詳しい説明はしませんが、詳細についてはMongoDBでのクエリガイドをご覧ください。
MongoDBのクエリの基本的な構文は次のようになります。
db.<collection_name>.find()
クエリ結果をより見やすい形式で表示するには、.pretty()
を使用できます。
db.<collection_name>.find().pretty()
まとめ
MongoDBは、市場で最も人気のあるNoSQLデータベースになりました。開発者は、柔軟性とアジリティを保って作業できるため、MongoDBでの作業を楽しんでいます。
MongoDBは、リレーショナルデータベースの厳密性に代わる選択肢を提供し、進化するスキーマを持つアプリケーションにより適しています。MongoDBの入門、インデックス、トランザクションなどに関する詳細なガイドについては、他のMongoDBコンテンツをご覧ください。
MongoDBを使用している場合は、PrismaのMongoDBコネクタをチェックしてください!Prisma Clientを使用すると、本番環境のMongoDBデータベースを安心して管理できます。
MongoDBとPrismaでの作業を開始するには、ゼロからの入門ガイド、または既存のプロジェクトに追加する方法をチェックしてください。