データモデルの作成
項目一覧
Overview
Device Sync データモデルは、Atlas Device SDK で使用される Realm オブジェクト スキーマと App Services スキーマの 2 つのコンシステント スキーマで構成されています。
次のように、アプリのデータモデルは、最初に Realm オブジェクト スキーマを使用して作成することも、最初に App Services スキーマを使用して作成することもできます。
Realm オブジェクト スキーマから App Services スキーマを作成する: モバイルファーストで開発していて、Atlas クラスターにまだデータが存在しない場合は、Realm オブジェクト スキーマを App Services スキーマに変換できます。
App Services スキーマから Realm オブジェクト スキーマを作成する: MongoDB Atlas クラスターに既にデータが存在する場合は、MongoDB はデータをサンプリングしてスキーマを生成します。その後、Atlas App Services は、そのスキーマを Realm オブジェクト スキーマに変換することで、Atlas Device SDK を使用してモバイル アプリケーション内で使用できます。
どちらのアプローチの場合でも、Atlas クラスターとモバイル アプリケーションの両方がそれぞれのデータモデルを使用するように設定すると、サーバーとクライアントの間でのデータモデルに対する変更は自動的に更新されます。
前提条件
スキーマを作成するには、アプリに少なくとも 1 つのリンクされたデータソースが必要です。
ただし、サーバーレスインスタンスまたはフェデレーティッドデータベースインスタンス は対象外です。
Realm オブジェクトモデルからの Atlas App Services スキーマの作成
Realm オブジェクト スキーマは、モバイル クライアント SDKを通して変更または定義できます。Realm オブジェクト スキーマへの変更は、開発モードが有効になっている場合にのみ可能です。App Services は、Realm オブジェクト スキーマへの変更を App Services スキーマに反映します。
Realm オブジェクト スキーマの作成については、Atlas Device SDK 固有のドキュメントを参照してください。
Realm オブジェクト スキーマの編集
アプリケーションの開発を続けると、その変更に基づいてさまざまなデータ検証ルールを適用するように、そのアプリケーションとともにデータモデルを変更する必要があります。Development Mode がオンの場合、クライアント コード内で Realm オブジェクト スキーマを編集できます。Development Mode がオフの場合、データ検証が行われるため、 Development Mode がオンでない間は、App Services は Realm オブジェクト スキーマへの変更を受け入れません。
重要
必須のプライマリキー_id
Atlas Device Sync を使用するには、データモデルに _id
というプライマリキー フィールドが必要です。_id
は、string
、int
、または objectId
のいずれかのタイプになります。
例
あるグループがソーシャル メディア アプリケーションを開発しています。グループが最初にアプリケーションを開発したとき、ユーザーの誕生日はユーザーのデータモデルの必須フィールドでした。ただし、保存されるユーザー データの量に関するプライバシー上の懸念から、マネジメントはユーザーの誕生日フィールドを任意のフィールドにするという新しい要件を設けました。アプリケーション開発者は、App Services UI で Development Mode をオンにして、クライアント コード内でユーザー モデルを編集します。
const realmObjectModel = { name: 'User', properties: { _id: 'objectId', _partition: 'string', name: 'string', // developers set optional: true to adhere to the new requirement birthday: {type: 'date', optional: true}, }, primaryKey: '_id' }; Realm.open({schema: realmObjectModel, sync: {/*...*/}}) .then(realm => { // ... use the realm instance to read and modify data })
Realm オブジェクト スキーマの変更に合わせた App Services スキーマの更新
Development Mode がオンになっている間は、Atlas App Servicesはデータモデルへの書き込みを検証しないため、Realm オブジェクトモデルを自由に更新できます。Development Mode をオフにすると、MongoDB Atlas Application Services は Atlas App Services スキーマを自動的に更新し、それに基づいて Atlas クラスターに対する強制的なデータ検証を開始します。
Sync 画面で、Development Mode の横にあるスライダーをクリックして Development Mode をオフにします。そのUI は、開発モードがオフになっていることを示します。
注意
モバイル クライアント コードから将来データモデルを更新するには、この手順を再度実行します。
Atlas App Services スキーマからの Realm オブジェクト スキーマの作成
App Services スキーマの定義
開始するには、Atlas App Services スキーマが定義されていることを確認します。App Services は、この App Services スキーマを、モバイル アプリケーションで構成されて利用される Realm オブジェクト スキーマに変換します。
次の要件に注意してください。
The App Services スキーマは、
_id
と呼ばれるプライマリキー フィールドが必要です。_id
は、string
、int
、またはobjectId
のいずれかのタイプになります。スキーマ オブジェクト タイプ名は、57 文字以下の UTF-8 文字とする必要があります。
Realmオブジェクト スキーマを使った Realm のオープン
生成された Realm オブジェクト スキーマをクライアント アプリケーションで使用できます。データモデルでデータ検証を強制的に実施するには、Realm オブジェクト スキーマを使用してRealmを開きます。これにより、モバイル クライアントからデータベースに不適切なデータが入力されることを防止します。
モバイル アプリケーションのコードに統合したいオブジェクト モデルの Realm オブジェクト スキーマの右側にある [Copy] をクリックします。これにより、選択した SDK の Realm オブジェクト スキーマのコードがクリップボードにコピーされます。
IDE でモバイル アプリケーションのコードを開き、Realm オブジェクト スキーマのコードを貼り付けます。
const UserSchema = { // your copied and pasted Realm Object Schema name: 'User', properties: { _id: 'objectId', _partition: 'string', name: 'string', birthday: 'date' }, primaryKey: '_id' }; // Initialize a realm with your Realm Object Schema Realm.open({schema: UserSchema, sync: { /* ... */ }}) .then(realm => { // ... use the realm instance to read and modify data })
生成された Realm オブジェクト スキーマを使用するには、Atlas Device SDK 固有のドキュメントを参照してください。
さらに読む
これらのスキーマの相互マッピング方法の詳細は、「データモデル マッピング」を参照してください。
既存の同期データモデルを更新するには、「データモデルの更新」を参照してください。
同期されたクラスター内のコレクションのスキーマを定義する方法については、「スキーマの定義および強制」を参照してください。