Firestoreを使っている際、特定のドキュメントに紐づくサブコレクションを取得する方法がわからずハマったため、備忘録としてまとめます。
バージョン
- vue 3.3.11
- firebase 10.8.0
記事の信頼性
- ぼくは独学で未経験から従業員300名以上の自社開発企業へ転職しました。
- 実務ではVue.jsとRailsを毎日書いています。
- 初心者や駆け出しエンジニアがつまづくポイントも身をもってよく理解しています。
目次
問題
ぼくは現在、Vue.jsとFirebaseを使い、個人開発でクイズアプリを作っています。
Firestoreのトップコレクションとしてquizzes
コレクションが、そのサブコレクションとして選択肢を表すchoices
コレクションが存在しています。
特定のクイズに紐づく選択肢をすべて取得したかったのですが、やり方がわかりませんでした、、。
解決策
結論として、以下のようにコードを記述すればOKです。
import { collection, getDocs } from 'firebase/firestore'
import { db } from '@/firebase'
// 特定の quizId に紐づく choices コレクションのデータを取得
const getChoicesForQuiz = async (quizId: string) => {
// quizId を使用して choices コレクションへの参照を作成
const choicesCollectionRef = collection(db, 'quizzes', quizId, 'choices');
// choices コレクションのドキュメントを取得
const choicesSnapshot = await getDocs(choicesCollectionRef);
// choices ドキュメントのデータを配列に変換
const choices = choicesSnapshot.docs.map(doc => ({
id: doc.id,
...doc.data()
}));
return choices
}
これでサブコレクションのデータを取得することができました!
おわりに
今回はquizzes
コレクションの配下にサブコレクションとしてchoices
コレクションが設定された、階層構造となっている場合の取得方法です。
親子関係のコレクションが同一階層に定義されている場合の取得方法については、↓の記事をご確認ください。
というか、階層構造の場合でも、↑の記事のやり方を使うこともできます。
技術書が好きなエンジニア向け
「技術書の内容が頭に入らない」を防ぐ5つの読書方法
「技術書の内容が頭に入らない」を防ぐための5つの読書方法を紹介します。最後まで読めば効率よくインプットできるようになります。
コメント