Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
データ型

コレクション - Java SDK

Realm コレクションは、1 つのタイプの 0 個以上のインスタンスを含むオブジェクトです。 Realm コレクションは同種です。つまり、コレクション内のすべてのオブジェクトは同じタイプです。

Realm のクエリ エンジンを使用して、任意のコレクションをフィルタリングおよびソートできます。 コレクションはライブであるため、現在のスレッド上の Realm インスタンスの現在の状態を常に反映します。 コレクション通知をサブスクライブして、コレクションの変更をリッスンすることもできます。

Realm には、リスト結果の 2 種類のコレクションがあります。

Realm オブジェクトには、非 Realm オブジェクト データ型のリストを含めることができます。 これらのコレクションは タイプ RealmList<T>でモデル化できます。ここでは、 Tは次のタイプになります。

  • String

  • Integer

  • UUID

  • ObjectId

  • Boolean

  • Float

  • Double

  • Short

  • Long

  • Byte

  • byte[]

  • Date

Tip

リスト コレクションは、2 つの Realm タイプ間の対多の関係を表します。 リストは可変です。書込みトランザクション内で、リストに要素を追加および削除できます。 リストはクエリに関連付けられていません。

結果のコレクションは、クエリ操作の遅延評価された結果を表します。 結果は不変です。結果コレクションに要素を追加または削除することはできません。 結果には、その内容を決定する関連付けられたクエリがあります。

RealmResultsクラスは抽象リスト から継承され、同様に動作します。例、RealmResults は順序付けられており、インデックスを介して個々のオブジェクトにアクセスできます。クエリに一致しない場合、返されるRealmResults オブジェクトは、 オブジェクト参照ではなく、長さ0 nullのリストになります。

書込みトランザクションでは、 RealmResultsセット内のオブジェクトのみを変更または削除できます。

Realm コレクションはライブであるため、コレクションを反復処理するとオブジェクトが移動される可能性があります。 スナップショットを使用してコレクションを安全に反復処理できます。

Realm は、標準の UI ウィジェットにデータをバインドするためのアダプターを提供します。 これらの クラスは、組み込みの クラスと クラスを含むOrderedRealmCollection RealmResultsRealmListインターフェースを実装する任意のクラスで動作します。アダプターの詳細については、コレクションの表示 に関するドキュメントを参照してください。

重要

アダプターには管理されたオブジェクトが必要

Realm アダプターは、Realm のインスタンスに関連付けられた管理対象の Realm オブジェクト インスタンスのみを受け入れます。 マネージドされていないオブジェクトを表示するには、ゴミ箱ビューには一般的な Android RecyclerView.Adapterを使用し、リストビューにはArrayAdapterを使用します。

ライブ オブジェクトと同様に、Realm コレクションは通常ライブ されます。

  • ライブ結果のコレクションには、関連付けられているクエリの現在の結果が常に反映されます。

  • ライブ リストには、Realm インスタンス上の関係の現在の状態が常に反映されます。

コレクションがライブでない場合は、次の 3 つのケースがあります。

  • コレクションは管理されていません。たとえば、Realm にまだ追加されていない Realm オブジェクト、または Realm からコピーされた Realm オブジェクトの List プロパティなどです。

  • コレクションは固定されています。

  • コレクションはスナップショットの一部です。

コレクション通知と組み合わせると、ライブ コレクションによりクリーンでリアクティブなコードが可能になります。 たとえば、ビューにクエリの結果が表示されるとします。 ビュー クラスで結果コレクションへの参照を保持すると、結果コレクションを更新したり最新であることを検証したりすることなく、必要に応じて結果コレクションを読み取ることができます。

警告

インデックスは変更される可能性があります

結果は自動的に更新されます。 コレクションにオブジェクトの位置インデックスを保存したり、コレクション内のオブジェクトの数を保存したりすると、保存されたインデックスやカウント値は使用する時間によって古くなる可能性があります。

Realm は、結果コレクションの要素にアクセスするなど、そのクエリの結果を実際に要求した場合にのみクエリを実行します。 この遅延評価により、大規模なデータセットや複雑なクエリを処理するための洗練された高性能なコードを書込むことができます。

遅延評価の結果、Realm でクエリ結果を制限するために特別なメカニズムは必要ありません。 たとえば、クエリが数千のオブジェクトと一致するが、最初の 10 個のオブジェクトのみをロードする場合は、結果コレクションの最初の 10 個の要素のみにアクセスします。

遅延評価の代わりに、ページ区切りの一般的なタスクが非常に簡単になります。 たとえば、Realm 内の数千のオブジェクトに一致するクエリに関連付けられた結果コレクションがあるとします。 ページごとに 100 個のオブジェクトを表示します。 任意のページに進むには、ターゲット ページに対応するインデックスから、結果コレクションの要素にアクセスします。

コレクションが必要な場合は、次の経験式を使用して、リストと結果コレクションが適切かどうかを判断できます。

これらのさまざまなユースケースを理解するには、オブジェクトを直接追加または削除できるかどうかを検討してください。 リストを使用すると関係を制御できるため、オブジェクトを直接追加および削除できます。 結果コレクションでは、その内容がクエリによって決定されるため、オブジェクトを直接追加または削除することはできません。

メールアドレスを表す文字列のコレクションである emails というフィールドを持つ、 Realmがもあります。 このデータはユーザーが管理します。 アプリケーションでは、ユーザー インスタンスからメールアドレスを追加および削除する必要があります。 したがって、リストを使用してemailsのフィールドタイプを定義します。

一方、25 年を超えるすべてのユーザーの Realm をクエリする場合、結果のコレクションにユーザーを直接追加または削除しても意味はありません。 そのコレクションの内容は、クエリが別の 権限 のセットと一致する場合にのみ変更されます。 したがって、Realm は結果のコレクションを提供します。

注意

逆の 1 対多の関係

Realm は暗黙的な逆関係コレクションの内容を自動的に決定するため、このようなコレクションからオブジェクトを追加または削除することはできません。 したがって、このような 1 対多の関係プロパティの型は、実際にはリストではなく、結果のコレクションです。

戻る

フィールド型

項目一覧