7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1分で理解!Firestoreのサブコレクション

Last updated at Posted at 2020-12-18

*この記事ではJavaScriptで書いていきます。

NoSQLについてはこちらの記事へ↓
https://qiita.com/Yu-kiFujiwara/items/c1c52495fd321373c544

##そもそもfirestoreってどういう形で保存するん?
firestoreはNoSQLの中でもドキュメント型と言われ、JSON形式のまま保存することができます。
firestoreではコレクション、ドキュメント、フィールド、データという4つの情報、
Key-Valueペアで構成されるデータを持つフィールド、フィールドを複数持つドキュメント、ドキュメントをまとめたコレクションという形でデータが構成されており、スキーマを決める必要がないため、自由にデータを保存することができます。

スクリーンショット 0002-12-18 8.36.52(2).png

//書き込み
firebase.firestore().collection("auther").set({name: "太郎", age: 20})

//読み込み
firebase.firestore().collection("auther").where("name", "===", "太郎").where("age", "===", 20)

//更新
firebase.firestore().collection("auther").doc(1).update({age: 21})

##サブコレクションってなんなん?
また、firebaseにはサブコレクションという考え方もあり、
1つのコレクションにリレーションを組むような形でコレクションを持たせることができます。
DB構成は下記の通りです。

スクリーンショット 0002-12-18 9.01.21(2).png

autherコレクションがpostコレクションを保有するという、
より現実に近いような形でDBを構成することができます。

//書き込み
firebase.firestore().collection("auther").doc(1).collection("post").set({text: こんにちは})

//読み取り
firebase.firestore().collection("auther").doc(1).collection("post").where("text", "===", "こんにちは")

//更新
firebase.firestore().collection("auther").doc(1).collection("post").doc(1).update({text: こんばんは})

##どう設計すべきか
・リレーションを組んでおらず、joinリクエストができないので一度にデータを取得できるようにデータを持つ
・データを重複して持つことを許容する
・データを更新する場合は重複したデータに対してそれぞれ更新リクエストをかける

RDBではNGとされている、これらのデータの持たせ方、更新の仕方が推奨されています。

##参照
https://www.footchantech.com/post/firestore_subcollection

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?