他で定義されているドキュメントを参照できる事を知ったので試してみました。以前にサンプルとして作っていたチャットアプリを改変してreferenceを試してみます。メッセージのトランザクションデータ内にユーザー名を参照するreference型のフィールドを定義するようにしてみます。RDBのER図でいうとこんな感じで。ユーザーのマスタデータは手動で作ります。ユーザーのマスタデータメッセージデータが入るコレクションも作っておきます。いつもどおりfirebaseに接続してfirestoreを取得し、chat_user以下のDocumentSnapshotを配列に保持しておきます。})});このユーザーのリストデータを使ったView部分は以下のようにしました。</select>DocumentSnapshotのプロパティからDocumentReferenceを取得したものをhtmlのselectで選択した結果にバインドしました。userRefという変数にDocumentReferenceが格納されるようになります。続いて投稿メソッドを作成します。userというフィールドに上記で保持しているユーザーデータのDocumentReferenceをそのまま登録します。},このメソッドを呼び出して登録されたデータはこのようになりました。リファレンス型のデータを投入するのはすごく楽です。次にメッセージデータを画面上に展開してみます。})});登録された日時の降順でデータを取得し、その内容をmessageListという変数に格納します。userフィールドにはDocumentReferenceが入っているので、getメソッドでDocumentSnapshotを取得してから参照先のnameフィールドの値を取得という処理になっています。View側での表示はこのようにしました。</table>表示結果は以下のようになりました。Firestoreのchat_userのnameを直接変更したら画面上の表示も変更されることを確認できました。ちなみに、reference型の参照先のデータが変更されたのはメッセージデータが変更されたという検知がされないようで、ブラウザのリロードは必要となりました。まとめこのreference型を利用すれば、これまでNoSQLだから冗長なデータを作成をしていた部分もすっきりしそうです。RDBよりフロント側の実装コストはかかってしまいそうです。非正規化したデータ設計もありかと思います。(9)月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。