- Firebase が提供する NoSQL のデータベース
- [公式ドキュメント](https://firebase.google.com/docs/firestore?hl=ja)
## データ構造
- コレクション
- ドキュメントのコンテナ
- コレクションは明示的に作成・削除する必要はなく自動的に作成・削除される
- ドキュメント
- JSON に似たデータ
- ドキュメントは必ずコレクションに保存される
- データ
- [サポートされるデータ型](https://firebase.google.com/docs/firestore/manage-data/data-types?hl=ja)
- サブコレクション
- 特定のドキュメントに関連付けられたコレクション
- 親ドキュメントとは別で管理される
- ドキュメントを削除してもサブコレクションは削除されない
- コレクショングループ
- 複数のサブコレクションを
- コレクション vs サブコレクション
- コレクションかサブコレクションのどちらを使うかはユースケースによる
- 公式ドキュメント [データ構造の選択](https://firebase.google.com/docs/firestore/manage-data/structure-data?hl=ja) が参考になる
## インデックス
- インデックスの種類
- 単一フィールドインデックス
- 自動インデックス
- Cloud Firestore は全てのフィールドに対して自動的に単一フィールドインデックスを作成する
- 自動インデックスを作成したくない場合は「単一フィールドインデックス除外( `Single-field index exemptions`)」を作成する
- 複合インデックス
- インデックスモード
- インデックスにはフィールドに対してモードが存在する
- 具体的なインデックスモード
- 昇順
- 降順
- 配列の内容
- [ベストプラクティス](https://firebase.google.com/docs/firestore/query-data/index-overview?hl=ja#indexing_best_practices)
- [インデックス管理](https://firebase.google.com/docs/firestore/query-data/indexing?hl=ja)
- 既存のインデックスに対応しないクエリを実行するとエラーを返す。このエラーに含まれるリンクから不足しているインデックスを作成することができる
- コンソールや CLI で複合インデックスを手動で定義して管理することもできる
## データ操作
- データ追加
- データを追加する時は明示的にドキュメントの ID を指定する方法と、Cloud Firestore が ID を自動的に生成する方法がある
- ID を指定する場合 `set()` を使う
- ID を指定せず自動生成する場合は `add()` を使う
- アトミックオペレーション
- トランザクション
- 読み込み処理と、その後の書き込み処理で構成される
- バッチ書き込み
- 複数の書き込み処理で構成される
## 参考リンク
- [【図で解説】Firestoreでできること・できないこと](https://zenn.dev/yucatio/articles/173f386c471398)