Docs Menu
Docs Home
/ /
Atlas App Services
/ /

データモデル マッピング

項目一覧

  • データベース、コレクション、オブジェクト
  • 開発モードでのマッピング
  • mappings
  • タイプ名
  • プロパティ タイプ
  • 配列のプロパティ
  • 混合プロパティ
  • 埋め込みオブジェクト
  • セット
  • 辞書
  • 関係
  • 地理空間データ
  • データモデルのマッピング例
  • App Services スキーマ
  • SDK オブジェクトモデル
  • Atlas のデータ

このページには、Atlas Device Sync で使用される App Services スキーマが、Atlas Device SDK で使用される SDK オブジェクトモデルにどのようにマッピングされるかについての情報が含まれています。

これらのデータモデルを生成する方法については、次のページを参照してください。

Device Sync がこれら 2 つのデータモデルをどのように使用するかについて詳しくは、「同期データモデルの概要 」を参照してください。

Device Sync を構成するときは、データを保存するデータソースを指定します。 このデータソースには複数のデータベースが含まれる場合があり、各データベースには複数のコレクションが含まれる場合があります。

Atlas App Services スキーマは、Realm Database のオブジェクト名を、Device Sync データソース内のデータベースのコレクションにマッピングします。 App Services スキーマの titleフィールドは、Realm Database のオブジェクトタイプ名にマップされます。 title名によってクライアント オブジェクトと適切な Atlas コレクションの間のマッピングが決定されるため、この名前は同期されたデータソース内のすべてのスキーマ間で一意である必要があります。

titleはコレクション名と一致する必要はありません。

Petsという名前のデータベースを持つアプリを考えてみましょう。 CanineFelineなど、複数のコレクションが含まれる場合があります。 Canineコレクションの App Services スキーマは、以下の例のに似ており、スキーマのtitleフィールドはDogです。 これにより、 Dogという Realm Database オブジェクトがPetsデータベース内のCanineコレクションにマッピングされます。

同じクラスター内でtitleDogである別のスキーマは存在できませんでした。 たとえば、title DogDebugTest を持つオブジェクトを、同じクラスター内の データベースと データベースの両方に同期することはできません。アプリ開発目的で同じオブジェクトを異なるコレクションに同期する場合は、異なるデータソースを使用する必要があります(開発用クラスターと本番用クラスターは別)。

Device Sync 構成で開発モードを有効にすると、App Services は同期する Realm Database オブジェクトのコレクションとスキーマを自動的に作成できます。 開発モードを有効にするときに、指定したデータベースにこれらのコレクションが作成されます。

開発モードを有効にすると、Sync は、Realm Database オブジェクトタイプの名前と一致するtitleを持つ App Services スキーマを持つコレクションを検索します。 このコレクションは、リンクされたデータ ソース内の任意のデータベースにある可能性があります。 開発モードを設定するときに追加するデータベース内にある必要はありません。

リンクされたデータソース内のどの App Services スキーマにも対応するtitleがない場合、App Services はこのオブジェクト型の新しいコレクションを作成します。 このコレクションは、開発モードを有効にするときに指定するデータベースに作成されます。 コレクション名はオブジェクトのタイプと一致し、対応する App Services スキーマには、オブジェクトタイプの名前である値を持つtitleフィールドがあります。 これにより、Realm Database オブジェクトと新しいコレクションの間にマッピングが作成されます。

Petsという名前のデータベースを持つ Atlas クラスターを考えてみましょう。 既存のデータを含むFelineコレクションが含まれています。

アプリケーション コードで、新しいDogオブジェクトを定義します。 開発モードを有効にし、新しいオブジェクトタイプのコレクションを作成するデータベースとしてPetsデータベースを指定します。 新しいDogオブジェクトを同期すると、App Services はPetsデータベースにDogコレクションを作成し、そのスキーマを作成します。 スキーマ内のオブジェクトのtitleDogです。

後で新しいPersonオブジェクトをアプリケーション コードに追加して同期すると、App Services はPetsデータベースにこのPersonオブジェクト用の新しいコレクションを作成します。 別のデータベースにPersonオブジェクトのコレクションを作成する場合は、別のデータベースにあるPersonオブジェクトのスキーマを定義および強制できます。 または、開発モードを無効にしてから再度有効にし、新しいコレクションを作成する別のデータベースを選択することもできます。

titleフィールドには、スキーマで表されるオブジェクトタイプの名前が含まれます。 これは、Atlas Device SDK のクラスまたはスキーマ名と同等です。 タイプ名は同期されたクラスター内のすべてのスキーマ間で一意である必要がありますが、それ以外は任意であり、コレクション名と一致する必要はありません。

従来のアプローチでは、「Dog」や「 people 」のように、各オブジェクトタイプに単数形の名を付けます。 開発モードで、または既存のドキュメントのサンプリングによって生成されたスキーマは、この規則を使用します。

注意

Atlas Device Sync を使用するには、タイプ名が 57 文字の UTF-8 文字を超えることはできません。

特定のプロパティに対して次の制約を構成できます。

Parameter
タイプ
説明

タイプ

文字列

SDK オブジェクトモデル内のすべてのプロパティには、厳密に定義されたデータ型があります。 プロパティの型は、プリミティブ データ型、または同じ SDK オブジェクトモデルで定義されたオブジェクトタイプにすることができます。 また、 型は、プロパティに単一の値が含まれているか、値のリストが含まれているかを指定します。

Realm データベースは次のプロパティ タイプをサポートしています。

  • ブール値

  • integer

  • double

  • string

  • date

  • Decimal128

  • objectId

  • uuid

  • 混合

  • 配列

  • オブジェクト

サポートされているデータ型の詳細については、「スキーマ タイプ 」を参照してください。

任意

ブール値

任意プロパティには、null 値を含めることも、オブジェクトから完全に省略することもできます。 デフォルトでは、必須として明示的にマークされていない限り、すべてのプロパティは任意です。

default

ブール値

クライアント アプリケーションが定義されたプロパティの値を持たない新しいオブジェクトを作成する場合、オブジェクトは代わりにデフォルト値を使用します。

必須プロパティを含まないスキーマ サブセットを使用してクライアントでデータベースを開くと、サーバーは必須プロパティの値にゼロまたは空白のデフォルト値を自動的に入力します。

必須 フィールドの値が欠落しているオブジェクトを作成しようとすると、検証に失敗し、Realm に保持されません。

インデックス付き

ブール値

プロパティ インデックスにより、特定の読み取り操作の速度が大幅に向上しますが、書込み操作のオーバーヘッドが増加します。 インデックスは、プロパティの値に基づいてオブジェクトを照会するなど、等価比較に特に役立ちます。 ただし、インデックスは追加のストレージを消費します。

データ型に関する SDK 固有の詳細については、以下を参照してください。

SDK オブジェクトモデルと App Services スキーマはいずれも配列プロパティをサポートしています。

配列プロパティの SDK 固有の詳細については、以下を参照してください。

Atlas App Services スキーマで配列プロパティをモデル化する方法の詳細については、「 BSON types - 配列 」を参照してください。 App Services スキーマは、項目の最小数と最大数の指定など、SDK オブジェクトモデルが実行しない特定の制約をサポートしています。

SDK オブジェクトモデルと App Services スキーマはどちらも混合型プロパティをサポートしています。

混合フィールドにはサポートされている任意のデータ型を含めることができ、機能的には事前に定義された構造を持たないオブジェクトまたはドキュメントとして機能します。

App Services スキーマで混合プロパティをモデル化する方法の詳細については、「混合 - スキーマ タイプ 」を参照してください。

注意

2024 年 5 月 28 日の後に作成されたアプリ

年 5 月 日以降に作成された App Services アプリは、混合データのコレクション(配列と辞書)を混合データ プロパティに2024でき28 。 コレクション内に他のコレクションをネストできるため、厳密なデータモデルを定義しなくても、JSON や MongoDB ドキュメントなどの複雑なデータ構造を保存できます。

この機能を Atlas Device SDK で使用するには、次のいずれかの最小 SDK バージョンを使用する必要があります。

  • C++ SDK: バージョン TDB

  • Flutter SDK: v 2.0.0以降

  • Kotlin SDK: v 2.0.0以降

  • .NET SDK: v 12.2.0以降

  • Node.js SDK: v 12.9.0以降

  • React Native SDK: v 12.9.0以降

  • Swift SDK: v10.51.0 以降

この機能は Java SDK ではサポートされていません

サポートされている SDK を使用して既存のアプリでこの機能を有効にする方法の詳細については、 サポートにお問い合わせください 。

混合プロパティではコレクション(配列または辞書)を活用して、変数 JSON データや複雑な MongoDB ドキュメントなど、事前定義されたスキーマに適さないデータを保存できます。 混合データのコレクションには、他の混合データのコレクションを含めることができるため、複雑な構造にデータをネストできます。 例については、このページの「サンプル ドキュメント: 混合データのネストされたコレクション 」を参照してください。

App Services スキーマまたは SDK オブジェクトモデル スキーマには、混合データ型でコレクションを保存できます。

混合データ型に関する SDK 固有の詳細については、以下を参照してください。

注意

新しい Java SDK アプリは RealmAny を使用できません

Java SDK を使用する新しい App Services アプリは、 RealmAnyタイプのプロパティを持つデータモデルを同期できません。 アプリ内で Device Sync で混合データ型を使用するには、 Kotlin SDK を使用します。

埋め込みオブジェクトは親オブジェクト内にネストされたデータとして埋め込まれます。 埋め込みオブジェクトは、親オブジェクトのライフサイクルを継承します。 独立したデータベース オブジェクトとして存在することはできません。

埋め込みオブジェクトに関する SDK 固有の詳細については、以下を参照してください。

Atlas App Services スキーマでの 1 対 1 の関係のモデル化の詳細については、「埋め込みオブジェクトの関係 」を参照してください。

SDK オブジェクトモデルと App Services スキーマはどちらも Set データ型をサポートしています。 セットは、一意の値のコレクションです。

セットに関する SDK 固有の詳細については、以下を参照してください。

App Services スキーマでセットをモデル化する方法の詳細については、「セット 」を参照してください。

SDK オブジェクトモデルと App Services スキーマは両方とも辞書データ型をサポートしています。 セットは、一意の値のコレクションです。 辞書は、特定の type の値とペアになった動的な一意の string キーのコレクションです。 機能的には、フィールド名が事前に定義されていないオブジェクトまたはドキュメントです。

辞書に関する SDK 固有の詳細については、以下を参照してください。

App Services スキーマで辞書をモデル化する方法の詳細については、 「 辞書 」を参照してください。

SDK オブジェクトモデルは次のタイプの関係をサポートしています。

  • 対 1 の関係: 対 1 の関係とは、あるオブジェクトが特定の方法で他のオブジェクトのみに関連付けられている ことを意味します。

  • 対多の関係: 対多の関係とは、オブジェクトが複数のオブジェクトに特定の方法で関連していることを意味します。

  • 逆関係: 逆関係は、定義された 1 対多または 1 対多の関係で、オブジェクトを参照する他のオブジェクトにリンクします。

App Services スキーマは 1 対多の関係をサポートします。 App Services スキーマは逆の関係をサポートしていません

関係に関する SDK 固有の詳細については、以下を参照してください。

App Services スキーマでの関係のモデル化の詳細については、「関係 」を参照してください。

地理空間データでは、地表の地点とその他のデータが記述されます。 App Services には地理空間型データは組み込まれておらず、 代わりに、標準的な GeoJSON オブジェクトを使用して地理データをモデル化します。 地理空間データの詳細については、「スキーマ タイプ 」を参照してください。

地理空間データに関する SDK 固有の詳細については、以下を参照してください。

この例では、Device Sync を使用してDogをモデル化する方法を示します。

この App Services スキーマは、Device Sync で使用されるDogデータモデルを作成します。

App Services スキーマで定義された犬のデータモデル
{
"title": "Dog",
"bsonType": "object",
"required": [
"_id",
"name"
],
"properties": {
"_id": {
"bsonType": "objectId"
},
"name": {
"bsonType": "string"
},
"age": {
"bsonType": "int"
}
"breed": {
"bsonType": "string"
}
"details": {
"bsonType": "mixed"
}
}
}

次のコード例では、各 Atlas Device SDK にDog SDK オブジェクトモデルを作成します。

Swift SDK データモデルで定義された犬のクラス
import Foundation
import RealmSwift
class Dog: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var age: Int?
@Persisted var breed: String?
@Persisted var name: String = ""
@Persisted var details: AnyRealmValue
}
Java SDK データモデルで定義されたドキュメント クラス
import io.realm.RealmObject;
import org.bson.types.ObjectId;
public class Dog extends RealmObject {
@PrimaryKey
@Required
private ObjectId _id;
private Integer age;
private String breed;
@Required
private String name;
private RealmAny details;
// Standard getters & setters
public ObjectId getId() { return _id; }
public void setId(ObjectId _id) { this._id = _id; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
public String getBreed() { return breed; }
public void setBreed(String breed) { this.breed = breed; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public RealmAny getDetails() { return details; }
public void setDetails(RealmAny details) { this.details = details; }
}
Kotlin SDK データモデルで定義された犬のクラス
import io.realm.RealmObject;
import org.bson.types.ObjectId;
open class Dog : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId(),
var age: Int? = null,
var breed: String? = null,
var name: String = ""
var details: RealmValue? = null
}
Flutter SDK データモデルで定義されているドキュメント クラス
import 'package:realm/realm.dart';
part 'realm_models.realm.dart';
@RealmModel()
class _Dog {
@PrimaryKey()
@MapTo('_id')
late ObjectId id;
int? age;
String? breed;
late String name;
late RealmValue details;
}
.NET SDK データモデルで定義されているドキュメント クラス
using System;
using System.Collections.Generic;
using Realms;
using MongoDB.Bson;
public class Dog : RealmObject
{
[MapTo("_id")]
[PrimaryKey]
public ObjectId Id { get; set; }
[MapTo("age")]
public int? Age { get; set; }
[MapTo("breed")]
public string Breed { get; set; }
[MapTo("name")]
[Required]
public string Name { get; set; }
[MapTo("details")]
public RealmValue Details { get; set; }
}
Node.js SDK データモデルで定義された犬のクラス
export const DogSchema = {
name: 'Dog',
properties: {
_id: 'objectId',
age: 'int?',
breed: 'string?',
name: 'string',
},
primaryKey: '_id',
details: 'mixed',
};
React Native SDK データモデルで定義された犬のクラス
export const DogSchema = {
class Dog extends Realm.Object<Dog> {
_id!: Realm.BSON.ObjectId;
age?: number;
breed?: string;
name!: string;
details?: Realm.Mixed;
static schema: ObjectSchema = {
name: 'Dog',
properties: {
_id: 'objectId',
age: 'int?',
breed: 'string?',
name: 'string',
details: 'mixed?',
},
primaryKey: '_id',
};

Dogデータモデルに Device Sync を使用するアプリケーションは、以前のスキーマに基づいて Atlas に MongoDB ドキュメントを作成します。

Atlas で作成された犬のドキュメント
{
"_id": ObjectId('616f44305a205add93ff1081'),
"age": 8,
"breed": "Golden Retriever",
"name": "Jasper",
"details": null
}

混合データのネストされたコレクションは、混合データ型に保存された辞書または配列です。 これは、次の例のようになります。

混合データを含む MongoDB のドキュメント
{
"_id": ObjectId('616f44305a205add93ff1081'),
"age": 8,
"breed": "Golden Retriever",
"name": "Jasper",
"details": {
"vaccinations": ["rabies", "distemper"],
"weight": 65.5,
"isNeutered": true,
"vetVisits": [
{
"date": 2002-08-18T04:56:07.000+00:00,
"reason": "annual checkup"
},
{
"date": 2003-08-18T04:56:07.000+00:00,
"reason": "annual checkup"
}
]
}
}

注意

2024 年 5 月 28 日の後に作成されたアプリ

年 5 月 日以降に作成された App Services アプリは、混合データのコレクション(配列と辞書)を混合データ プロパティに2024でき28 。 コレクション内に他のコレクションをネストできるため、厳密なデータモデルを定義しなくても、JSON や MongoDB ドキュメントなどの複雑なデータ構造を保存できます。

この機能を Atlas Device SDK で使用するには、次のいずれかの最小 SDK バージョンを使用する必要があります。

  • C++ SDK: バージョン TDB

  • Flutter SDK: v 2.0.0以降

  • Kotlin SDK: v 2.0.0以降

  • .NET SDK: v 12.2.0以降

  • Node.js SDK: v 12.9.0以降

  • React Native SDK: v 12.9.0以降

  • Swift SDK: v10.51.0 以降

この機能は Java SDK ではサポートされていません

サポートされている SDK を使用して既存のアプリでこの機能を有効にする方法の詳細については、 サポートにお問い合わせください 。

戻る

スキーマの重大な変更の実施