Cloud Firestore เป็นฐานข้อมูล NoSQL ที่เน้นเอกสาร ต่างจากฐานข้อมูล SQL ตรงที่ไม่มีตารางหรือแถว แต่คุณจะจัดเก็บข้อมูลในเอกสารแทน ซึ่งจะจัดระเบียบเป็นคอลเล็กชัน
เอกสารแต่ละฉบับมีชุดคู่คีย์-ค่า Cloud Firestore ได้รับการเพิ่มประสิทธิภาพสำหรับการจัดเก็บคอลเล็กชันเอกสารขนาดเล็กจำนวนมาก
เอกสารทั้งหมดต้องจัดเก็บไว้ในคอลเล็กชัน เอกสารอาจมีคอลเล็กชันย่อยและออบเจ็กต์ที่ซ้อนกัน ซึ่งทั้ง 2 อย่างนี้อาจมีฟิลด์ดั้งเดิม เช่น สตริง หรือออบเจ็กต์ที่ซับซ้อน เช่น รายการ
ระบบจะสร้างคอลเล็กชันและเอกสารโดยนัยใน Cloud Firestore เพียงกำหนดข้อมูลให้กับเอกสารภายในคอลเล็กชัน หากไม่มีทั้งคอลเล็กชัน หรือเอกสาร Cloud Firestore จะสร้างให้
เอกสาร
ใน Cloud Firestore หน่วยพื้นที่เก็บข้อมูลคือเอกสาร เอกสารคือ ระเบียนน้ำหนักเบาที่มีฟิลด์ซึ่งแมปกับค่า เอกสารแต่ละฉบับจะ ระบุด้วยชื่อ
เอกสารที่แสดงถึงผู้ใช้ alovelace
อาจมีลักษณะดังนี้
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
ออบเจ็กต์ที่ซับซ้อนและซ้อนกันในเอกสารเรียกว่าแผนที่ เช่น คุณสามารถ จัดโครงสร้างชื่อผู้ใช้จากตัวอย่างด้านบนด้วยแผนที่ได้ดังนี้
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
คุณอาจสังเกตเห็นว่าเอกสารมีลักษณะคล้ายกับ JSON มาก ซึ่งจริงๆ แล้วก็เป็นเช่นนั้น แม้ว่าจะมีข้อแตกต่างบางอย่าง (เช่น เอกสารรองรับประเภทข้อมูลเพิ่มเติมและมีขนาดจำกัดที่ 1 MB) แต่โดยทั่วไปแล้ว คุณสามารถถือว่าเอกสารเป็นระเบียน JSON ขนาดเล็กได้
คอลเล็กชัน
เอกสารจะอยู่ในคอลเล็กชัน ซึ่งเป็นเพียงคอนเทนเนอร์สำหรับเอกสาร ตัวอย่างเช่น คุณอาจมีusers
คอลเล็กชันเพื่อเก็บผู้ใช้ต่างๆ โดยแต่ละคน
จะแสดงด้วยเอกสาร
ผู้ใช้
รายalovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore ไม่มีสคีมา คุณจึงมีอิสระอย่างเต็มที่ในการเลือกช่องที่จะใส่ในแต่ละเอกสารและประเภทข้อมูลที่จะจัดเก็บในช่องเหล่านั้น เอกสารภายในคอลเล็กชันเดียวกันอาจมีฟิลด์ที่แตกต่างกันทั้งหมด หรือจัดเก็บข้อมูลประเภทต่างๆ ในฟิลด์เหล่านั้น อย่างไรก็ตาม เราขอแนะนำให้ใช้ฟิลด์และประเภทข้อมูลเดียวกันในเอกสารหลายฉบับ เพื่อให้คุณค้นหาเอกสารได้ง่ายขึ้น
คอลเล็กชันมีเอกสารเท่านั้น โดยต้องไม่มีฟิลด์ดิบที่มีค่าโดยตรง และต้องไม่มีคอลเล็กชันอื่นๆ (ดูคำอธิบายวิธีจัดโครงสร้างข้อมูลที่ซับซ้อนมากขึ้นใน Cloud Firestore ได้ที่ข้อมูลแบบลำดับชั้น)
ชื่อของเอกสารภายในคอลเล็กชันต้องไม่ซ้ำกัน คุณสามารถระบุคีย์ของคุณเอง เช่น รหัสผู้ใช้ หรือจะให้ Cloud Firestore สร้างรหัสแบบสุ่ม ให้คุณโดยอัตโนมัติก็ได้
คุณไม่จำเป็นต้อง "สร้าง" หรือ "ลบ" คอลเล็กชัน หลังจากสร้างเอกสารแรกในคอลเล็กชันแล้ว คอลเล็กชันจะพร้อมใช้งาน หากคุณลบเอกสารทั้งหมดในคอลเล็กชัน คอลเล็กชันนั้นจะไม่มีอยู่อีกต่อไป
รายการอ้างอิง
เอกสารทุกฉบับใน Cloud Firestore จะมีตัวระบุที่ไม่ซ้ำกันตามตำแหน่ง
ในฐานข้อมูล ตัวอย่างก่อนหน้าแสดงเอกสาร alovelace
ภายในคอลเล็กชัน users
หากต้องการอ้างอิงตำแหน่งนี้ในโค้ด คุณสามารถสร้างการอ้างอิงถึงตำแหน่งดังกล่าวได้
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Kotlin
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
Python
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Go
PHP
PHP
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Ruby
การอ้างอิงคือออบเจ็กต์ที่มีขนาดเล็กซึ่งชี้ไปยังตำแหน่งในฐานข้อมูล คุณสร้างการอ้างอิงได้ไม่ว่าจะมีข้อมูลอยู่ในนั้นหรือไม่ก็ตาม และ การสร้างการอ้างอิงจะไม่ดำเนินการใดๆ ในเครือข่าย
นอกจากนี้ คุณยังสร้างการอ้างอิงถึงคอลเล็กชันได้ด้วย
Web
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
Objective-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin
val usersCollectionRef = db.collection("users")
Java
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
Java
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Go
PHP
PHP
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Ruby
คุณยังสร้างการอ้างอิงได้โดยการระบุเส้นทางไปยังเอกสารหรือคอลเล็กชันเป็นสตริง โดยมีคอมโพเนนต์เส้นทางที่คั่นด้วยเครื่องหมายทับ (/
) เพื่อความสะดวก ตัวอย่างเช่น หากต้องการสร้างการอ้างอิงไปยังเอกสาร alovelace
ให้ทำดังนี้
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Kotlin
val alovelaceDocumentRef = db.document("users/alovelace")
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
Java
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Go
PHP
PHP
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Ruby
ข้อมูลแบบลำดับชั้น
หากต้องการทำความเข้าใจวิธีการทำงานของโครงสร้างข้อมูลแบบลำดับชั้นใน Cloud Firestore ลองพิจารณาแอปแชทตัวอย่างที่มีข้อความและห้องแชท
คุณสร้างคอลเล็กชันที่ชื่อ rooms
เพื่อจัดเก็บห้องแชทต่างๆ ได้โดยทำดังนี้
ห้องแชท
ห้องA
name : "my chat room"
roomB
...
เมื่อมีห้องแชทแล้ว ให้ตัดสินใจว่าจะจัดเก็บข้อความอย่างไร คุณอาจไม่ต้องการจัดเก็บไว้ในเอกสารของห้องแชท เอกสารใน Cloud Firestore ควรมีขนาดเล็ก และห้องแชทอาจมีข้อความจำนวนมาก อย่างไรก็ตาม คุณสามารถสร้างคอลเล็กชันเพิ่มเติมภายในเอกสารของห้องแชท เป็นคอลเล็กชันย่อยได้
คอลเล็กชันย่อย
วิธีที่ดีที่สุดในการจัดเก็บข้อความในสถานการณ์นี้คือการใช้คอลเล็กชันย่อย คอลเล็กชันย่อยคือคอลเล็กชันที่เชื่อมโยงกับเอกสารที่เฉพาะเจาะจง
คุณสร้างคอลเล็กชันย่อยที่ชื่อ messages
สำหรับเอกสารห้องทุกห้องในคอลเล็กชัน rooms
ได้โดยทำดังนี้
ห้องแชท
ห้องA
name : "my chat room"
ข้อความ
ข้อความ 1
from : "alex"
msg : "Hello World!"
ข้อความ 2
...
roomB
...
ในตัวอย่างนี้ คุณจะต้องสร้างการอ้างอิงถึงข้อความในคอลเล็กชันย่อย ด้วยโค้ดต่อไปนี้
Web
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Swift
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objective-C
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Kotlin
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Dart
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
Java
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
PHP
PHP
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและสร้างCloud Firestoreไคลเอ็นต์ได้ที่ Cloud Firestoreไลบรารีของไคลเอ็นต์
Ruby
สังเกตรูปแบบการสลับของคอลเล็กชันและเอกสาร คอลเล็กชัน และเอกสารต้องเป็นไปตามรูปแบบนี้เสมอ คุณอ้างอิงคอลเล็กชัน ในคอลเล็กชันหรือเอกสารในเอกสารไม่ได้
คอลเล็กชันย่อยช่วยให้คุณจัดโครงสร้างข้อมูลแบบลำดับชั้นได้ ซึ่งจะช่วยให้เข้าถึงข้อมูลได้ง่ายขึ้น
หากต้องการรับข้อความทั้งหมดใน roomA
คุณสามารถสร้างการอ้างอิงคอลเล็กชัน
ไปยังคอลเล็กชันย่อย messages
และโต้ตอบกับคอลเล็กชันย่อยนั้นได้เช่นเดียวกับ
การอ้างอิงคอลเล็กชันอื่นๆ
เอกสารในคอลเล็กชันย่อยอาจมีคอลเล็กชันย่อยด้วยเช่นกัน ซึ่งช่วยให้คุณ ซ้อนข้อมูลได้มากยิ่งขึ้น คุณซ้อนข้อมูลได้สูงสุด 100 ระดับ