この記事は sadnessOjisan Advent Calendar 2021 19 日目の記事です。書かれた日付は 1/12 です。
firestore v9 における subcollection の扱いについてです。
subcollection について
firestore は col -> doc -> col -> doc -> ... といった階層構造を作れます。 これはクエリにおいても
const messageRef = db.collection("rooms").doc("roomA").collection("messages");
として現れます。
v9 における subcollection の取得方法
v9 では collection を指定する関数に collection()
があります。
これは
const citiesRef = collection(db, "cities");
として使います。
FYI: https://firebase.google.com/docs/firestore/query-data/get-data
さて、この関数を使って subcollection を取得するにはどうするでしょうか。
それはこうです。
const citiesRef = collection(db, "cities", "docId", "subcollection");
直感的ではありませんが、
- 引数を増やしてネストを表現
- doc id を引数に含める
がポイントです。
v9 における subcollection の doc 取得
v8 までは subcollection の ref を作って取得していましたが、v9 からは
const citiesRef = doc(db, "cities", "docId", "subcollection", "docId2");
として取得可能です。
ちなみに doc 関数は db を除く引数が偶数であることが仕様として決まっています。