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 เพื่อจัดเก็บห้องแชทต่างๆ ได้โดยทำดังนี้
ห้องแชท
ห้อง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 ระดับ