Cloud Firestore เป็นฐานข้อมูล NoSQL เชิงเอกสาร ซึ่งต่างจากฐานข้อมูล SQL ไม่มีตารางหรือแถว แต่คุณจะจัดเก็บข้อมูลไว้ในเอกสาร ซึ่งก็คือ จัดระเบียบเป็นคอลเล็กชัน
เอกสารแต่ละรายการประกอบด้วยชุดคู่คีย์-ค่า Cloud Firestore คือ เหมาะสำหรับการจัดเก็บคอลเล็กชันขนาดใหญ่ของเอกสารขนาดเล็ก
เอกสารทั้งหมดต้องจัดเก็บไว้ในคอลเล็กชัน เอกสารอาจมีคอลเล็กชันย่อยและออบเจ็กต์ที่ฝังอยู่ ซึ่งทั้ง 2 อย่างอาจมีช่องพื้นฐาน เช่น สตริง หรือออบเจ็กต์ที่ซับซ้อน เช่น รายการ
คอลเล็กชันและเอกสารจะสร้างขึ้นโดยปริยายใน Cloud Firestore เพียงกําหนดข้อมูลให้กับเอกสารภายในคอลเล็กชัน หากคอลเล็กชันหรือเอกสารไม่มีอยู่ Cloud Firestore จะสร้างให้
เอกสาร
ใน Cloud Firestore หน่วยพื้นที่เก็บข้อมูลคือเอกสาร เอกสารคือ ระเบียนขนาดเล็กที่มีช่องซึ่งจับคู่กับค่า เอกสารแต่ละรายการจะระบุด้วยชื่อ
เอกสารที่แทนผู้ใช้ 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
การแข่งขัน
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore เป็นแบบไร้สคีมา คุณจึงมีอิสระอย่างสมบูรณ์ในการ ช่องที่คุณใส่ไว้ในเอกสารแต่ละฉบับ และประเภทข้อมูลที่จัดเก็บในช่องเหล่านั้น เอกสารภายในคอลเล็กชันเดียวกันอาจมีช่องที่แตกต่างกันทั้งหมดหรือจัดเก็บข้อมูลประเภทต่างๆ ในช่องเหล่านั้น อย่างไรก็ตาม เราขอแนะนำให้ใช้ช่องและประเภทข้อมูลเดียวกันในเอกสารหลายรายการ เพื่อให้คุณค้นหาเอกสารได้ง่ายขึ้น
โดยคอลเล็กชันจะมีเอกสารและไม่มีข้อมูลอื่นใดอีก ต้องไม่มีไฟล์ข้อมูล RAW โดยตรง ด้วยค่า และต้องไม่มีคอลเล็กชันอื่นๆ (ดูคำอธิบายเกี่ยวกับวิธีจัดโครงสร้างข้อมูลที่ซับซ้อนมากขึ้นใน 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"
roomB
...
เมื่อมีห้องแชทแล้ว ลองตัดสินใจเลือกวิธีจัดเก็บข้อความ คุณอาจ ต้องการเก็บไว้ในเอกสารของห้องแชท เอกสารใน Cloud Firestore ควรมีขนาดเล็ก และห้องแชทอาจมีข้อความจํานวนมาก แต่คุณสร้างคอลเล็กชันเพิ่มเติมภายในเอกสารของห้องแชทได้ โดยจะเป็นคอลเล็กชันย่อย
คอลเล็กชันย่อย
วิธีที่ดีที่สุดในการจัดเก็บข้อความในสถานการณ์นี้คือการใช้คอลเล็กชันย่อย ต คอลเล็กชันย่อยคือคอลเล็กชันที่เชื่อมโยงกับเอกสารหนึ่งๆ
คุณสามารถสร้างคอลเล็กชันย่อยชื่อ messages
สําหรับเอกสารทั้งหมดของห้องแชทใน
คอลเล็กชัน rooms
ของคุณ:
ห้อง
roomA
name : "my chat room"
ข้อความ
ข้อความ1
from : "alex"
msg : "Hello World!"
message2
...
ห้อง 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 ระดับ
คอลเล็กชัน