firebaseのチャットで画像を扱うために
LINEのようなチャットツールでは、チャットしている時系列に画像を表示したり、それとは別に、写真だけを一覧表示することができる。
これがRDBMSでは頭を捻らなくても実装することができるが、firebaseのようなNoSQLでこれを実装するためにはどのようにすれば良いか。
その場合は、 collectionGroup()
を使用してすることで実装することができる。
そのために以下のようなコレクションを定義する。
※C: コレクション ※d: ドキュメント
rooms(C) - room1(d) - name - description - messages(C) - XXX(d) - body - images(C) - members(C) - member1(d) - name - photoUrl
写真を時系列のメッセージと共に流す際には、
db.collection("rooms").doc("room1").collection("messages")
のように普通通りに取得をして、画像だけを一覧したい場合は
db.collection("rooms").doc("room1")collectionGroup("images")
を実行する。
collectionGroupを使うことで、他のmessagesドキュメントの写真を串刺しにして取得することができる。