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
เพื่อจัดเก็บห้องแชทต่างๆ ดังนี้
ห้อง
roomA
name : "my chat room"
roomB
...
เมื่อสร้างห้องแชทแล้ว ให้เลือกวิธีจัดเก็บข้อความ คุณอาจไม่ต้องการจัดเก็บไฟล์เหล่านั้นไว้ในเอกสารของห้องแชท เอกสารใน Cloud Firestore ควรมีขนาดเล็ก และห้องแชทอาจมีข้อความจํานวนมาก แต่คุณสร้างคอลเล็กชันเพิ่มเติมภายในเอกสารของห้องแชทได้ โดยจะเป็นคอลเล็กชันย่อย
คอลเล็กชันย่อย
วิธีที่ดีที่สุดในการจัดเก็บข้อความในสถานการณ์นี้คือการใช้คอลเล็กชันย่อย ส่วนย่อยคือคอลเล็กชันที่เชื่อมโยงกับเอกสารที่เฉพาะเจาะจง
คุณสามารถสร้างคอลเล็กชันย่อยชื่อ messages
สำหรับเอกสารห้องประชุมทุกรายการในคอลเล็กชัน rooms
ได้โดยทำดังนี้
ห้อง
roomA
name : "my chat room"
messages
message1
from : "alex"
msg : "Hello World!"
message2
...
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 ระดับ
คอลเล็กชัน