Cloud Firestore เป็นฐานข้อมูล NoSQL ที่เน้นเอกสาร ฐานข้อมูล SQL ไม่มีตารางหรือแถว แต่จะจัดเก็บข้อมูลในเอกสารที่มีการจัดระเบียบเป็นคอลเล็กชันแทน
document แต่ละรายการจะมีชุดคู่คีย์-ค่า Cloud Firestore ได้รับการเพิ่มประสิทธิภาพสำหรับการจัดเก็บคอลเล็กชันเอกสารขนาดเล็กขนาดใหญ่
เอกสารทั้งหมดต้องเก็บไว้ในคอลเล็กชัน เอกสารอาจมี subcollections และออบเจ็กต์ที่ซ้อนกันอยู่ ซึ่งทั้ง 2 รายการนี้อาจมีช่องพื้นฐาน เช่น สตริงหรือออบเจ็กต์ที่ซับซ้อน เช่น รายการ
ระบบจะสร้างคอลเล็กชันและเอกสารใน Cloud Firestore โดยปริยาย เพียงกำหนดข้อมูลให้กับเอกสารภายในคอลเล็กชัน หากไม่มีคอลเล็กชันหรือเอกสาร Cloud Firestore จะสร้างคอลเล็กชันดังกล่าว
เอกสาร
ใน Cloud Firestore หน่วยของพื้นที่เก็บข้อมูลคือเอกสาร เอกสารเป็นแผ่นเสียงขนาดเล็กที่มีช่องซึ่งจับคู่กับค่า ระบบจะระบุชื่อเอกสารแต่ละรายการ
เอกสารที่แทนผู้ใช้ alovelace
อาจมีลักษณะเช่นนี้
แอโลวีเลซ
first : "Ada"
last : "Lovelace"
born : 1815
วัตถุที่ซับซ้อนที่ซ้อนอยู่ในเอกสารเรียกว่าแผนที่ ตัวอย่างเช่น คุณสามารถจัดโครงสร้างชื่อผู้ใช้จากตัวอย่างด้านบนด้วยแผนที่ ดังนี้
แอโลวีเลซ
name :
first : "Ada"
last : "Lovelace"
born : 1815
คุณอาจสังเกตเห็นว่าเอกสารคล้ายกับ JSON มาก จริงๆ แล้ว หลักๆ แล้วก็เป็นเช่นนั้น จะมีข้อแตกต่างบางอย่าง (เช่น เอกสารรองรับประเภทข้อมูลเพิ่มเติมและมีขนาดไม่เกิน 1 MB) แต่โดยทั่วไปแล้ว คุณจะมองว่าเอกสารเป็นระเบียน JSON ที่มีขนาดเล็กได้
คอลเล็กชัน
เอกสารจะอยู่ในคอลเล็กชัน ซึ่งเป็นคอนเทนเนอร์สำหรับเอกสาร ตัวอย่างเช่น คุณอาจมีคอลเล็กชัน users
สำหรับเก็บข้อมูลผู้ใช้ต่างๆ โดยให้แต่ละรายการแทนด้วยเอกสารดังนี้
ผู้ใช้
รายแอโลวีเลซ
first : "Ada"
last : "Lovelace"
born : 1815
การแข่งขัน
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore เป็นแบบไร้สคีมา คุณจึงมีอิสระอย่างสมบูรณ์ในช่องที่ใส่ในเอกสารแต่ละฉบับและประเภทข้อมูลที่จัดเก็บในช่องเหล่านั้น เอกสารภายในคอลเล็กชันเดียวกันทั้งหมดอาจมีช่องต่างกัน หรือเก็บข้อมูลประเภทต่างๆ ไว้ในช่องเหล่านั้นได้ อย่างไรก็ตาม เป็นความคิดที่ดีที่จะใช้ช่องและประเภทข้อมูลเดียวกันในเอกสารต่างๆ เพื่อให้ค้นหาเอกสารได้ง่ายขึ้น
โดยคอลเล็กชันจะมีเอกสารและไม่มีข้อมูลอื่นใดอีก ซึ่งจะมีช่องดิบที่มีค่าโดยตรงไม่ได้ และต้องไม่มีคอลเล็กชันอื่นๆ (ดูข้อมูลลำดับชั้นสำหรับคำอธิบายเกี่ยวกับวิธีจัดโครงสร้างข้อมูลที่ซับซ้อนยิ่งขึ้นใน Cloud Firestore)
ชื่อเอกสารภายในคอลเล็กชันจะไม่ซ้ำกัน คุณจะระบุคีย์ของคุณเอง เช่น User-ID หรือให้ 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+KTX
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+KTX
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+KTX
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"
ห้อง B
...
เมื่อมีห้องแชทแล้ว ลองตัดสินใจเลือกวิธีจัดเก็บข้อความ คุณอาจไม่ต้องการ เก็บไว้ในเอกสารของห้องแชท เอกสารใน Cloud Firestore ควรมีขนาดเล็กและห้องแชทอาจมีข้อความจำนวนมาก อย่างไรก็ตาม คุณสามารถสร้างคอลเล็กชันเพิ่มเติมเป็นคอลเล็กชันย่อยภายในเอกสารของห้องแชทได้
คอลเล็กชันย่อย
วิธีที่ดีที่สุดในการจัดเก็บข้อความในสถานการณ์นี้คือการใช้คอลเล็กชันย่อย คอลเล็กชันย่อยคือคอลเล็กชันที่เชื่อมโยงกับเอกสารหนึ่งๆ
คุณสามารถสร้างคอลเล็กชันย่อยชื่อ messages
สําหรับเอกสารทุกห้องในคอลเล็กชัน rooms
ได้ ดังนี้
ห้องแชท
ห้อง A
name : "my chat room"
ข้อความ
ข้อความ1
from : "alex"
msg : "Hello World!"
ข้อความ2
...
ห้อง B
...
ในตัวอย่างนี้ คุณจะสร้างการอ้างอิงไปยังข้อความในคอลเล็กชันย่อยด้วยโค้ดต่อไปนี้
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+KTX
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 ระดับ