Closed9

firestoreのネストはすべきか否か

  • Firestore、構造的にネストしたくなるけど実はこれ全然すべきでないのでは?について考える

https://firebase.google.com/docs/firestore/data-model?hl=ja

例:
ネストする場合
/users/{userId}/items/{items}

ネストしない場合
/users/{userId}
/items/{itemId}としてitemのドキュメント内にuserIdがある構造

https://stackoverflow.com/questions/56149601/firestore-collection-group-query-on-documentid
ネストした場合、/users/**/items/{itemId}的な探索は難しい。
(一応collectionGroupではできるが、itemIdで引くことはやっぱり難しい)

一方、flatにしておけば
collection("/items").where("userId", "==", "user")的なことで可能

例えばネストしてる場合itemId=10にアクセスするためにはusers/20/items/10などuserIdまで必要になる=URL構造としてもuserIdを含む形になる

ネストが有益なケースはなにか?

  • 本当に子要素として扱い、それらを独立して取り出すことが無い場合(RDBにおけるJSON型的な)

あとは、例えばmultitenancyのように/tenants/{tenant}/{someData**}のような使い方でも問題は無いかもしれない(これはよさそう)

ネストした方がセキュリティルールを担保しやすい

このスクラップは2020/12/02にクローズされました
ログインするとコメントできます