1 of 15

Firebase Firestore

Aggregationを触ってみた

2 of 15

株式会社Never 代表取締役

中川 祥平

  • ハイカジゲーム開発
  • 自社アプリ開発
  • クライアント業務
    • 受託開発 / SES
    • 技術アドバイザー

株式会社Neverの主な事業

Flutterアプリのご相談お待ちしております!

趣味はサウナ、陸上100m、心霊動画鑑賞👻

3 of 15

モチベーション

例えば「ユーザーの投稿数の合計値や5段階評価の平均値を表示したい」

というリクエストが開発途中から発生

  • これまでのFirestore
    • 最初から言ってよ〜😭

  • これからのFirestore
    • Aggregation登場でビビる必要ない😀(震声)

4 of 15

集計クエリ登場👏

count / sum / average

5 of 15

  • count
    • ドキュメント数
  • sum
    • 特定のクエリに一致する数値の合計値
  • average
    • 特定のクエリに一致する数値の平均値

集約クエリ

※countは2022年10月17日、sumとaverageは2023年12月15日に登場

6 of 15

Flutter + Firebase

コード例

7 of 15

8 of 15

1

2

フィールドを選べる

一括で取れるし、

複数のフィールドを

指定できる

9 of 15

条件指定

1

10 of 15

条件指定

OR

1

11 of 15

カーソル

1

12 of 15

  • リアルタイムリスナーやキャッシュデータは無い
    • サーバーからの取得に限る
  • 集約が 60 秒以内に解決できない場合は、 エラーになる
    • 60 秒以内に解決できない場合は、分散カウンタを使う
  • 集計クエリはインデックスエントリから読み取り、インデックス付きフィールドのみを含める
    • 複合インデックスの生成は忘れずに

動作と制限事項

https://firebase.google.com/docs/firestore/query-data/aggregation-queries?hl=ja#limitations

13 of 15

  • インデックスエントリ0〜1000個で1カウント
    • 1回のドキュメントの読み取りとして課金
    • 1500個の場合、2カウント
    • 1度のクエリで複数の集計関数を指定したら、   インデックスエントリは上がると思う(未調査)

料金体系

https://firebase.google.com/docs/firestore/pricing?hl=ja#aggregation_queries

14 of 15

おまけ

15 of 15

Thank you!