Firebase Cloud Firestore の関連データは Reference を使う

はじめに

Firebase Cloud Firestore の関連データを扱う場合は Reference型 を使いましょう。
Reference型とは FirestoreのCollectionReference・DocumentReferenceのことで、以下のドキュメントの「Cloud Firestore の参照」のことです。

firebase.google.com

関連データを保存する

Reference型はリレーションシップ(関連)データを保存する際に使用すると便利です。
関連付けることで、1: N , 1:1 に対するデータを保存することができます。

どんな時に使えるのか

例えば、チャットを実装する場合に「トーク一覧画面」「トーク画面」という2つを作るとします。(LINEやFacebookMessagerを想像してもらえるといいと思います)
その場合、「トークルームのテーブル」と「メッセージのテーブル」がデータとして必要になります。
かつ、「トークルームのテーブル」には最新メッセージを関連づけて保存しておくことができます。

f:id:QoopMk:20191013191340p:plain

オブジェクトへの変換も簡単

Firestore#toObject関数を使えば関連データ含めて、オブジェクトに変換することが可能です。

/**
 * メッセージルーム
 *
 * @property id ID
 * @property latestMessage 最新メッセージ
 */
data class TalkRoom(
    val latestMessage: Message?
    // ...省略
)

オブジェクトへの変換方法はこちらでも紹介しています。

qoopmk.hatenablog.jp

ストレージには使えない

Firebase Storageのデータ参照を直接持つことは現状は無理なようです。
画像をStorageに保存して、FirestoreにパスをStringで保存しておくのがいいかもしれません。

f:id:QoopMk:20191009212631p:plain