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)
ชื่อของเอกสารภายในคอลเล็กชันนั้นไม่ซ้ำกัน คุณระบุคีย์ของคุณเองได้ เช่น รหัสผู้ใช้ หรือให้ Cloud Firestore สร้างรหัสแบบสุ่มให้คุณโดยอัตโนมัติ
คุณไม่จำเป็นต้อง "สร้าง" หรือ "ลบ" คอลเลกชัน หลังจากที่คุณสร้างเอกสารแรกในคอลเล็กชัน คอลเล็กชันนั้นจะมีอยู่ หากคุณลบเอกสารทั้งหมดในคอลเล็กชัน เอกสารนั้นจะไม่มีอยู่อีกต่อไป
อ้างอิง
ทุกเอกสารใน Cloud Firestore จะถูกระบุโดยตำแหน่งภายในฐานข้อมูลโดยไม่ซ้ำกัน ตัวอย่างก่อนหน้านี้แสดงเอกสาร alovelace
ภายใน users
คอลเลกชัน หากต้องการอ้างอิงตำแหน่งนี้ในโค้ดของคุณ คุณสามารถสร้าง ข้อมูลอ้างอิง ได้
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
วัตถุประสงค์-C
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Kotlin+KTX
val 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
ไป
PHP
$document = $db->collection('samples/php/users')->document('lovelace');
ความสามัคคี
DocumentReference documentRef = db.Collection("users").Document("alovelace");
ค#
DocumentReference documentRef = db.Collection("users").Document("alovelace");
ทับทิม
ข้อมูลอ้างอิงเป็นอ็อบเจ็กต์น้ำหนักเบาที่ชี้ไปยังตำแหน่งในฐานข้อมูลของคุณ คุณสามารถสร้างข้อมูลอ้างอิงได้ไม่ว่าจะมีข้อมูลอยู่ที่นั่นหรือไม่ และการสร้างข้อมูลอ้างอิงจะไม่ดำเนินการใดๆ กับเครือข่าย
คุณยังสามารถสร้างการอ้างอิงถึง คอลเลกชัน :
Web version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
วัตถุประสงค์-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Java
CollectionReference usersCollectionRef = db.collection("users");
Kotlin+KTX
val usersCollectionRef = db.collection("users")
Dart
final usersCollectionRef = db.collection("users");
Java
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
ไป
PHP
$collection = $db->collection('samples/php/users');
ความสามัคคี
CollectionReference collectionRef = db.Collection("users");
ค#
CollectionReference collectionRef = db.Collection("users");
ทับทิม
เพื่อความสะดวก คุณยังสามารถสร้างการอ้างอิงโดยระบุพาธไปยังเอกสารหรือคอลเล็กชันเป็นสตริง โดยมีส่วนประกอบของพาธคั่นด้วยเครื่องหมายทับ ( /
) ตัวอย่างเช่น ในการสร้างการอ้างอิงไปยังเอกสาร alovelace
:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
วัตถุประสงค์-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Kotlin+KTX
val 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
ไป
PHP
$document = $db->document('users/lovelace');
ความสามัคคี
DocumentReference documentRef = db.Document("users/alovelace");
ค#
DocumentReference documentRef = db.Document("users/alovelace");
ทับทิม
ข้อมูลลำดับชั้น
เพื่อให้เข้าใจว่าโครงสร้างข้อมูลแบบลำดับชั้นทำงานอย่างไรใน Cloud Firestore ให้พิจารณาตัวอย่างแอปแชทที่มีข้อความและห้องสนทนา
คุณสามารถสร้างคอลเลกชันที่เรียกว่า rooms
เพื่อจัดเก็บห้องสนทนาต่างๆ:
name : "my chat room"
...
ตอนนี้คุณมีห้องสนทนาแล้ว ตัดสินใจว่าจะจัดเก็บข้อความอย่างไร คุณอาจไม่ต้องการเก็บไว้ในเอกสารของห้องสนทนา เอกสารใน Cloud Firestore ควรมีขนาดเล็ก และห้องสนทนาอาจมีข้อความจำนวนมาก อย่างไรก็ตาม คุณสามารถสร้างคอลเลกชันเพิ่มเติมภายในเอกสารของห้องสนทนาของคุณ เป็นคอลเลกชันย่อย
คอลเลกชั่นย่อย
วิธีที่ดีที่สุดในการจัดเก็บข้อความในสถานการณ์นี้คือการใช้คอลเลกชันย่อย คอลเล็กชันย่อยคือคอลเล็กชันที่เกี่ยวข้องกับเอกสารเฉพาะ
คุณสร้างคอลเล็กชันย่อยที่เรียกว่า messages
สำหรับเอกสารทุกห้องในคอลเล็กชัน rooms
ได้ดังนี้
name : "my chat room"
ข้อความ
from : "alex"
msg : "Hello World!"
ข้อความ
...
...
ในตัวอย่างนี้ คุณจะต้องสร้างการอ้างอิงไปยังข้อความในคอลเลกชั่นย่อยด้วยรหัสต่อไปนี้:
Web version 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web version 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Swift
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
วัตถุประสงค์-C
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Kotlin+KTX
val 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
ไป
PHP
$document = $db ->collection('rooms') ->document('roomA') ->collection('messages') ->document('message1');
ความสามัคคี
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
ค#
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
ทับทิม
สังเกตรูปแบบการสลับของคอลเลกชันและเอกสาร คอลเลกชันและเอกสารของคุณต้องเป็นไปตามรูปแบบนี้เสมอ คุณไม่สามารถอ้างอิงคอลเลกชั่นในคอลเลกชั่นหรือเอกสารในเอกสารได้
คอลเล็กชันย่อยช่วยให้คุณสามารถจัดโครงสร้างข้อมูลตามลำดับชั้น ทำให้เข้าถึงข้อมูลได้ง่ายขึ้น ในการรับข้อความทั้งหมดใน roomA
คุณสามารถสร้างการอ้างอิงคอลเลกชั่นไปยัง messages
การรวบรวมย่อยและโต้ตอบกับมันได้เหมือนกับที่คุณทำกับการอ้างอิงคอลเลกชั่นอื่นๆ
เอกสารในคอลเลกชั่นย่อยสามารถมีคอลเลกชั่นย่อยได้เช่นกัน ทำให้คุณสามารถซ้อนข้อมูลเพิ่มเติมได้ คุณสามารถซ้อนข้อมูลได้ลึกถึง 100 ระดับ