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 มาก อันที่จริงแล้วก็แทบจะเหมือนกันเลย โดยมีความแตกต่างบางประการ (เช่น เอกสารรองรับประเภทข้อมูลเพิ่มเติมและถูกจำกัดด้วยขีดจำกัดขนาดเอกสาร) แต่โดยทั่วไปแล้ว คุณสามารถจัดการเอกสารเป็นระเบียน JSON ขนาดเล็กได้
คอลเล็กชัน

เอกสารจะอยู่ในคอลเล็กชัน ซึ่งเป็นเพียงคอนเทนเนอร์สำหรับเอกสาร เช่น คุณอาจมีคอลเล็กชัน users เพื่อเก็บผู้ใช้ต่างๆ โดยแต่ละคนจะแสดงด้วยเอกสารดังนี้
ผู้ใช้ ราย
alovelace
first : "Ada"
last : "Lovelace"
born : 1815aturing
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 ได้ดังนี้
ห้องแชท
แอสซิสต์
name : "my chat room"ข้อความ
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 ระดับ