Cloud Firestore เป็นฐานข้อมูล NoSQL ที่เน้นเอกสาร ต่างจากฐานข้อมูล SQL ตรงที่ไม่มีตารางหรือแถว แต่คุณจัดเก็บข้อมูลไว้ใน เอกสาร ซึ่งจัดเป็น คอลเลกชันแทน
แต่ละ เอกสาร ประกอบด้วยชุดคู่คีย์-ค่า Cloud Firestore ได้รับการปรับให้เหมาะสมสำหรับการจัดเก็บคอลเลกชันเอกสารขนาดเล็กจำนวนมาก
เอกสารทั้งหมดจะต้องเก็บไว้ในคอลเลกชัน เอกสารสามารถมี คอลเลกชันย่อย และอ็อบเจ็กต์ที่ซ้อนกันได้ ซึ่งทั้งสองอย่างสามารถรวมฟิลด์ดั้งเดิม เช่น สตริง หรืออ็อบเจ็กต์ที่ซับซ้อน เช่น รายการได้
คอลเลกชันและเอกสารถูกสร้างขึ้นโดยปริยายใน Cloud Firestore เพียงกำหนดข้อมูลให้กับเอกสารภายในคอลเลกชัน หากไม่มีคอลเลกชันหรือเอกสาร Cloud Firestore จะสร้างขึ้นมา
เอกสาร
ใน Cloud Firestore หน่วยเก็บข้อมูลคือเอกสาร เอกสารคือเรกคอร์ดแบบน้ำหนักเบาที่มีฟิลด์ซึ่งแม็ปกับค่า เอกสารแต่ละฉบับจะถูกระบุด้วยชื่อ
เอกสารที่แสดงถึงผู้ใช้ alovelace
อาจมีลักษณะดังนี้:
รัก
first : "Ada"
last : "Lovelace"
born : 1815
วัตถุที่ซับซ้อนและซ้อนกันในเอกสารเรียกว่าแผนที่ ตัวอย่างเช่น คุณสามารถจัดโครงสร้างชื่อผู้ใช้จากตัวอย่างด้านบนด้วยแผนที่ได้ดังนี้:
รัก
name :
first : "Ada"
last : "Lovelace"
born : 1815
คุณอาจสังเกตเห็นว่าเอกสารมีลักษณะคล้ายกับ JSON มาก โดยพื้นฐานแล้วพวกเขาเป็นเช่นนั้น มีความแตกต่างบางประการ (เช่น เอกสารรองรับประเภทข้อมูลเพิ่มเติมและจำกัดขนาดไว้ที่ 1 MB) แต่โดยทั่วไป คุณสามารถถือว่าเอกสารเป็นบันทึก JSON แบบ Lightweight ได้
คอลเลกชัน
เอกสารอยู่ในคอลเลกชัน ซึ่งเป็นเพียงที่เก็บเอกสาร ตัวอย่างเช่น คุณสามารถมีคอลเลกชัน users
เพื่อบรรจุผู้ใช้ต่างๆ ของคุณ โดยแต่ละรายจะแสดงด้วยเอกสาร:
ผู้ใช้
รัก
first : "Ada"
last : "Lovelace"
born : 1815
การเข้าเรียนใน
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore ไม่มีสคีมา ดังนั้นคุณจึงมีอิสระเต็มที่ในการเลือกช่องที่คุณใส่ไว้ในเอกสารแต่ละฉบับและประเภทข้อมูลที่คุณจัดเก็บไว้ในช่องเหล่านั้น เอกสารภายในคอลเลกชันเดียวกันสามารถมีฟิลด์ที่แตกต่างกันหรือจัดเก็บข้อมูลประเภทต่างๆ ลงในฟิลด์เหล่านั้นได้ อย่างไรก็ตาม เป็นความคิดที่ดีที่จะใช้เขตข้อมูลและชนิดข้อมูลเดียวกันในเอกสารหลายฉบับ เพื่อให้คุณสามารถค้นหาเอกสารได้ง่ายขึ้น
คอลเลกชันประกอบด้วยเอกสารและไม่มีอะไรอื่น ไม่สามารถมีช่องข้อมูลดิบที่มีค่าได้โดยตรง และไม่สามารถมีคอลเลกชันอื่นๆ ได้ (ดู ข้อมูลลำดับชั้น สำหรับคำอธิบายวิธีจัดโครงสร้างข้อมูลที่ซับซ้อนมากขึ้นใน Cloud Firestore)
ชื่อของเอกสารภายในคอลเลกชันจะไม่ซ้ำกัน คุณจะระบุคีย์ของคุณเอง เช่น รหัสผู้ใช้ หรือให้ Cloud Firestore สร้างรหัสแบบสุ่มให้คุณโดยอัตโนมัติก็ได้
คุณไม่จำเป็นต้อง "สร้าง" หรือ "ลบ" คอลเลกชัน หลังจากที่คุณสร้างเอกสารแรกในคอลเลกชันแล้ว คอลเลกชันนั้นจะมีอยู่ หากคุณลบเอกสารทั้งหมดในคอลเลกชัน เอกสารดังกล่าวจะไม่มีอยู่อีกต่อไป
อ้างอิง
เอกสารทุกฉบับใน Cloud Firestore จะถูกระบุโดยไม่ซ้ำกันตามตำแหน่งภายในฐานข้อมูล ตัวอย่างก่อนหน้านี้แสดงเอกสาร alovelace
ภายในคอลเลกชัน users
หากต้องการอ้างอิงตำแหน่งนี้ในโค้ดของคุณ คุณสามารถสร้าง การอ้างอิง ถึงตำแหน่งนี้ได้
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web namespaced API
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
สวิฟท์
let alovelaceDocumentRef = db.collection("users").document("alovelace")
วัตถุประสงค์-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");
ชวา
หลาม
Python
ซี++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
DocumentReference documentRef = db.Collection("users").Document("alovelace");
ค#
ค#
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ทับทิม
การอ้างอิงเป็นวัตถุน้ำหนักเบาที่เพิ่งชี้ไปยังตำแหน่งในฐานข้อมูลของคุณ คุณสามารถสร้างข้อมูลอ้างอิงได้ไม่ว่าจะมีข้อมูลอยู่หรือไม่ก็ตาม และการสร้างข้อมูลอ้างอิงจะไม่ดำเนินการใดๆ บนเครือข่าย
คุณยังสามารถสร้างการอ้างอิงไปยัง คอลเลกชัน :
Web modular API
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web namespaced API
var usersCollectionRef = db.collection('users');
สวิฟท์
let usersCollectionRef = db.collection("users")
วัตถุประสงค์-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");
ชวา
หลาม
Python
ซี++
CollectionReference users_collection_reference = db->Collection("users");
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
CollectionReference collectionRef = db.Collection("users");
ค#
ค#
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ทับทิม
เพื่อความสะดวก คุณยังสามารถสร้างการอ้างอิงโดยระบุเส้นทางไปยังเอกสารหรือคอลเลกชั่นเป็นสตริง โดยมีส่วนประกอบเส้นทางคั่นด้วยเครื่องหมายทับ ( /
) ตัวอย่างเช่น หากต้องการสร้างการอ้างอิงถึงเอกสาร alovelace
:
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web namespaced API
var alovelaceDocumentRef = db.doc('users/alovelace');
สวิฟท์
let aLovelaceDocumentReference = db.document("users/alovelace")
วัตถุประสงค์-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");
ชวา
หลาม
Python
ซี++
DocumentReference alovelace_document = db->Document("users/alovelace");
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
DocumentReference documentRef = db.Document("users/alovelace");
ค#
ค#
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ทับทิม
ข้อมูลแบบลำดับชั้น
หากต้องการทำความเข้าใจวิธีการทำงานของโครงสร้างข้อมูลแบบลำดับชั้นใน Cloud Firestore ลองพิจารณาตัวอย่างแอปแชทที่มีข้อความและห้องสนทนา
คุณสามารถสร้างคอลเลกชันที่เรียกว่า rooms
เพื่อจัดเก็บห้องสนทนาต่างๆ:
name : "my chat room"
...
เมื่อคุณมีห้องสนทนาแล้ว ให้ตัดสินใจว่าจะจัดเก็บข้อความของคุณอย่างไร คุณอาจไม่ต้องการเก็บไว้ในเอกสารของห้องสนทนา เอกสารใน Cloud Firestore ควรมีขนาดเล็ก และห้องสนทนาอาจมีข้อความจำนวนมาก อย่างไรก็ตาม คุณสามารถสร้างคอลเลกชันเพิ่มเติมภายในเอกสารของห้องสนทนาของคุณเป็นคอลเลกชันย่อยได้
คอลเลกชันย่อย
วิธีที่ดีที่สุดในการจัดเก็บข้อความในสถานการณ์นี้คือการใช้คอลเลกชันย่อย คอลเลกชันย่อยคือคอลเลกชันที่เกี่ยวข้องกับเอกสารเฉพาะ
คุณสามารถสร้างคอลเลกชันย่อยที่เรียกว่า messages
สำหรับเอกสารห้องทุกห้องในคอลเลกชัน rooms
ของคุณ:
name : "my chat room"
ข้อความ
1from : "alex"
msg : "Hello World!"
ข้อความ
2...
...
ในตัวอย่างนี้ คุณจะสร้างการอ้างอิงถึงข้อความในคอลเลกชันย่อยด้วยรหัสต่อไปนี้:
Web modular API
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web namespaced API
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
สวิฟท์
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
วัตถุประสงค์-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");
ชวา
หลาม
Python
ซี++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
ค#
ค#
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ทับทิม
สังเกตรูปแบบการสะสมและเอกสารสลับกัน คอลเลกชันและเอกสารของคุณจะต้องเป็นไปตามรูปแบบนี้เสมอ คุณไม่สามารถอ้างอิงคอลเลกชันในคอลเลกชันหรือเอกสารในเอกสารได้
คอลเลกชันย่อยช่วยให้คุณจัดโครงสร้างข้อมูลตามลำดับชั้น ทำให้เข้าถึงข้อมูลได้ง่ายขึ้น หากต้องการรับข้อความทั้งหมดใน roomA
คุณสามารถสร้างการอ้างอิงคอลเลกชันไปยัง messages
คอลเลกชันย่อยและโต้ตอบกับข้อความดังกล่าวได้เหมือนกับที่คุณทำกับการอ้างอิงคอลเลกชันอื่นๆ
เอกสารในคอลเลกชันย่อยสามารถมีคอลเลกชันย่อยได้เช่นกัน ซึ่งช่วยให้คุณสามารถซ้อนข้อมูลเพิ่มเติมได้ คุณสามารถซ้อนข้อมูลได้ลึกถึง 100 ระดับ