tani1220 / panel-discussion

panel-discussion-vert.vercel.app
0 stars 0 forks source link

firestore / サブコレクションIDの一覧を取得 #27

Closed tani1220 closed 3 years ago

tani1220 commented 3 years ago

firestore / サブコレクションIDの一覧を取得したい

解決に時間が掛かりそうだったのでIssue化

tani1220 commented 3 years ago

サブコレクションの参照方法は const Ref = db.collection('コレクション').doc('コレクションID') .collection('サブコレクション').doc('サブコレクションID'); とすればいいが、ダイナミックルーティング使用して、それぞれのデータをページ化するため GetStaticPaths に複数のサブコレクションID(URL)を教える必要がある。

それを実現するためにコレクションIDの一覧を取得する関数を作成して、上記の参照方法を試してみたがサブコレクションIDを取得することができない

tani1220 commented 3 years ago

サブコレクションに対してクエリが書けるコレクショングループクエリがあるが、サブコレクションのドキュメントIDを取得することはできなさそう

tani1220 commented 3 years ago

ドキュメンテーションでコレクションのリストを取得することは、モバイル/ Webクライアントライブラリでは不可能と書かれている

tani1220 commented 3 years ago

こちらの記事によると、(1)サブコレクションのリスト一覧を実現するためには親ドキュメントのフィールドにArray型を定義して子ドキュメントIDを格納する方法と(2)Cloud Functionでサーバークライアントライブラリを使用して、クライアントで呼び出す方法があるみたい

(1)では、子ドキュメントにIDを指定する必要がある。子ドキュメントのフィールドにはディスカッションデータが入っていて、ユーザーからのアクション(質問投稿時)に作成される。ユーザーが複数の質問をする場合を考えると、複数のドキュメントIDが二重になるのでダイナミックルーティンが実現できない (2)ドキュメンテーションリフェレンスを読むとサーバークライアントライブラリを使ってクライアントから呼び出せばサブコレクション一覧が取得できそう