MongoDB で ORM を使用する

Bilal Shahid 2023年6月20日
  1. オブジェクト リレーショナル マッピング (ORM)
  2. MongoDB の ORM
  3. MongoDB の ORM の例
  4. まとめ
MongoDB で ORM を使用する

MongoDB は、JSON スタイルで表現されたドキュメントで構成される、データの保存と管理のための NoSQL ソリューションを導入しています。 他のデータベース システムと同様に、MongoDB も ORM と連携できます。

この記事では、MongoDB および一般的な ORM の概念について説明します。

オブジェクト リレーショナル マッピング (ORM)

オブジェクト リレーショナル マッピングは、リレーショナル データベース システムでのデータの操作を容易にする手法です。 これは、ビジネス モデルとストレージ データベースの間の橋渡しとして機能します。

ORM は、データベースにリレーションとして格納されたデータをアプリケーションの言語のオブジェクトにマッピングすることによって機能します。 これにより、同じプログラミング言語を使用して自然かつ流動的にデータにアクセスできるようになるため、コードを書く人にとってプログラミングが容易になるという利点があります。

これがどのように可能であるかをさらに説明しましょう。

オブジェクト指向言語を使用する場合、プログラマーはデータをビジネス ロジック層にオブジェクトとして格納する必要があります。 このデータは、テーブルまたはリレーションの形式でリレーショナル データベースに同時に格納されます。

コーディング中にこのリレーショナル データをオブジェクトに変換すると、見苦しいアプリケーションになる可能性があります。 また、プログラマーは 1つのアプリケーションで 2つの異なる言語を使用し、生のクエリを作成する必要があるため、エラーが発生しやすくなります。

したがって、ORM はこのプロセスを簡素化することで、この問題の解決策を提供します。

注: 出荷後にアプリケーションから ORM を削除するのは非常に困難です (そして費用がかかります!)。 したがって、ORM がプロセスを簡素化し、パフォーマンスの問題を導入し、それに応じて続行するかどうかを事前に決定する必要があります。

MongoDB の ORM

MongoDB は NoSQL ソリューションであり、リレーションを使用しないため、疑問が生じます。 ORM はまだ適用されますか? 答えはイエスです。ORM は MongoDB でも使用できますが、ここでは ODM としてより一般的に知られています。

ODM は Object Document Mapping の略で、MongoDB はデータをドキュメントに格納するため、RelationalDocument に置き換えます。

MongoDB のような NoSQL データベースの場合、ODM を使用することはそれほど大きな利点ではありません。 しかし、開発者の生産性を向上させるという追加の利点がもたらされます。これは、アプリケーションの全体的なパフォーマンスにとって不可欠です。

ただし、ODM は依然として MongoDB で広く使用されています。 これは、ODM がデータ間の論理関係を使用するのに役立つためです。NoSQL ではそのような関係を識別することが不可能であるため、そうでなければ簡単に表すことができません。

ODM がない場合、プログラマーはこれらのコード関係を手動で適用する必要があります。 MongoDB はドキュメント指向のアーキテクチャを備えているため、ドキュメントをオブジェクトとして参照することもできるため、ODM との統合に非常に適しています。

したがって、ODM フレームワークを MongoDB と共に使用して、データ モデル レイヤーを抽象化します。

注: MongoDB を初めて使用する場合は、ODM の使用をスキップして、より低いレベルの抽象化で作業することをお勧めします。 これにより、ODM によって提供される高レベルの抽象化の背後に隠れるのではなく、データベース ソフトウェアの動作に慣れ、その使用方法を詳しく知ることができます。

MongoDB の ORM の例

さまざまな言語用に記述された MongoDB で使用できる ORM ライブラリが多数あります。

それらのいくつかはオープンソースでもあります。 この記事では、いくつかの例を見ていきます。

モンゴイド

Ruby on Railsフレームワークを利用したアプリケーションには、Mongoidが適しています。 Mongoid ODM を Ruby ベースのアプリケーション用の MongoDB ORM として使用すると、ODM を使用する利点と同様に、プログラマーはすでに言語に精通しているため、データベース リソースをより簡単に操作できます。

例として、Mongoid を使用してインスタンスをデータベースに挿入するコード フラグメントを次に示します。

Person.create!(
first_name: "Ali",
last_name: "Raza"
) # => Person instance

以下は、Mongoid を使用して記述された MongoDB クエリの例です。

Person.
where(:dob.gte => "1990-01-01").
in(first_name: [ "Ali", "Raza" ]).
union.
in(first_name: [ "Ahmad" ])

Spring Data MongoDB

MongoDB 用の Java ベースの ORM の開発者の間で最も人気のある選択肢は、Spring Data MongoDB です。 新しいデータベースをプログラミングするための一貫した Spring ベースのモデルを提供します。

<dependencyManagement> タグ内の pom.xml ファイルで次の依存関係を使用して、Spring Data MongoDB を Maven プロジェクトに統合できます。

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-bom</artifactId>
<version>2022.0.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>

注: これらの依存関係は、この記事の執筆時に最新バージョン 2022.0.0 を使用します。

モンゴエンジン

MongoEngine は Python での MongoDB の ODM です。 シンプルな高レベル API を使用し、Python 用の公式 MongoDB ドライバーであるPyMongoの上に構築されています。

Document から継承するクラスを定義することにより、MongoEngine を使用して Python でデータベース スキーマを作成する方法の例を次に示します。

from mongoengine import *
import datetime


class Page(Document):
    title = StringField(max_length=200, required=True)
    date_modified = DateTimeField(default=datetime.datetime.utcnow)

データベースにアクセスするための簡単なクエリを次に示します。

for page in Page.objects:
    print page.title
myPage = Page.objects(title="Title")

まとめ

この記事では、MongoDB での ORM の使用法について詳しく説明しました。これは、開発プロセスの複雑さを最小限に抑えるのに役立ちます。 ORM は、データベース ドキュメントをコーディングしている言語のオブジェクトに変換するトランスレータとして機能し、プログラマにとってタスクを単純化します。

また、鳥瞰図からの MongoDB ORM のいくつかの例の動作についても説明しました。 それぞれの詳細については、この記事の範囲内では説明できません。

MongoDB の ORM の概念について学習していただければ幸いです。 学び続けます!

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub