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 ที่มีน้ำหนักเบา
คอลเลกชัน
เอกสารอยู่ในคอลเลกชั่นซึ่งเป็นเพียงคอนเทนเนอร์สำหรับเอกสาร ตัวอย่างเช่น คุณสามารถมีคอลเล็กชัน users
เพื่อให้มีผู้ใช้ต่างๆ ของคุณ โดยแต่ละรายการจะแสดงด้วยเอกสาร:
ผู้ใช้
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore เป็นแบบไร้สคีมา ดังนั้นคุณจึงมีอิสระอย่างเต็มที่ในการใส่ฟิลด์ที่คุณใส่ลงในเอกสารแต่ละฉบับ และประเภทข้อมูลที่คุณจัดเก็บในฟิลด์เหล่านั้น เอกสารในคอลเลกชันเดียวกันทั้งหมดสามารถมีฟิลด์ที่แตกต่างกันหรือเก็บข้อมูลประเภทต่างๆ กันในฟิลด์เหล่านั้น อย่างไรก็ตาม เป็นความคิดที่ดีที่จะใช้ฟิลด์และประเภทข้อมูลเดียวกันในเอกสารหลายฉบับ เพื่อให้คุณสามารถค้นหาเอกสารได้ง่ายขึ้น
คอลเลกชันประกอบด้วยเอกสารและไม่มีอะไรอื่น ไม่สามารถมีฟิลด์ดิบที่มีค่าได้โดยตรง และไม่สามารถมีคอลเล็กชันอื่นๆ (ดู ข้อมูลลำดับชั้น สำหรับคำอธิบายเกี่ยวกับวิธีจัดโครงสร้างข้อมูลที่ซับซ้อนมากขึ้นใน Cloud Firestore)
ชื่อของเอกสารภายในคอลเลกชันจะไม่ซ้ำกัน คุณสามารถระบุคีย์ของคุณเอง เช่น ID ผู้ใช้ หรือคุณสามารถให้ Cloud Firestore สร้าง ID แบบสุ่มให้คุณโดยอัตโนมัติ
คุณไม่จำเป็นต้อง "สร้าง" หรือ "ลบ" คอลเล็กชัน หลังจากที่คุณสร้างเอกสารฉบับแรกในคอลเลกชั่นแล้ว คอลเลกชั่นนั้นจะมีอยู่ หากคุณลบเอกสารทั้งหมดในคอลเลกชั่น เอกสารนั้นจะไม่มีอยู่อีกต่อไป
อ้างอิง
เอกสารทุกฉบับใน 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
ไป
พี.เอช.พี
พี.เอช.พี
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ 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
ไป
พี.เอช.พี
พี.เอช.พี
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ 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
ไป
พี.เอช.พี
พี.เอช.พี
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ 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
ไป
พี.เอช.พี
พี.เอช.พี
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ 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 ระดับ