*この記事ではJavaScriptで書いていきます。
NoSQLについてはこちらの記事へ↓
そもそもfirestoreってどういう形で保存するん?
firestoreはNoSQLの中でもドキュメント型と言われ、JSON形式のまま保存することができます。 firestoreではコレクション、ドキュメント、フィールド、データという4つの情報、 Key-Valueペアで構成されるデータを持つフィールド、フィールドを複数持つドキュメント、ドキュメントをまとめたコレクションという形でデータが構成されており、スキーマを決める必要がないため、自由にデータを保存することができます。
//書き込み
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構成は下記の通りです。
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とされている、これらのデータの持たせ方、更新の仕方が推奨されています。
Comments