Cloud Firestore là một cơ sở dữ liệu NoSQL, hướng tài liệu. Không giống như cơ sở dữ liệu SQL, không có bảng hoặc hàng. Thay vào đó, bạn lưu trữ dữ liệu trong tài liệu, được sắp xếp thành bộ sưu tập.
Mỗi tài liệu chứa một tập hợp cặp khoá-giá trị. Cloud Firestore được tối ưu hoá để lưu trữ các tập hợp lớn gồm nhiều tài liệu nhỏ.
Tất cả tài liệu phải được lưu trữ trong các tập hợp. Tài liệu có thể chứa tập hợp con và đối tượng lồng nhau, cả hai đều có thể bao gồm các trường gốc như chuỗi hoặc đối tượng phức tạp như danh sách.
Các tập hợp và tài liệu được tạo ngầm trong Cloud Firestore. Bạn chỉ cần gán dữ liệu cho một tài liệu trong một tập hợp. Nếu tập hợp hoặc tài liệu không tồn tại, Cloud Firestore sẽ tạo tập hợp hoặc tài liệu đó.
Tài liệu
Trong Cloud Firestore, đơn vị lưu trữ là tài liệu. Tài liệu là một bản ghi gọn nhẹ chứa các trường liên kết với giá trị. Mỗi tài liệu được xác định bằng một tên.
Tài liệu đại diện cho người dùng alovelace có thể có dạng như sau:
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Các đối tượng phức tạp, lồng nhau trong một tài liệu được gọi là bản đồ. Ví dụ: bạn có thể tạo cấu trúc tên người dùng từ ví dụ trên bằng một bản đồ, như sau:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Bạn có thể nhận thấy rằng các tài liệu trông rất giống JSON. Trên thực tế, về cơ bản thì đúng là như vậy. Có một số điểm khác biệt (ví dụ: tài liệu hỗ trợ các loại dữ liệu bổ sung và bị giới hạn ở giới hạn kích thước tài liệu), nhưng nhìn chung, bạn có thể coi tài liệu là bản ghi JSON gọn nhẹ.
Bộ sưu tập

Tài liệu nằm trong các tập hợp, đây chỉ đơn giản là vùng chứa cho tài liệu. Ví dụ: bạn có thể có một tập hợp users chứa nhiều người dùng, mỗi người dùng được biểu thị bằng một tài liệu:
người dùng
alovelace
first : "Ada"
last : "Lovelace"
born : 1815aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore không có giản đồ, vì vậy, bạn có toàn quyền quyết định về những trường bạn đưa vào mỗi tài liệu và loại dữ liệu bạn lưu trữ trong các trường đó. Các tài liệu trong cùng một tập hợp đều có thể chứa các trường khác nhau hoặc lưu trữ các loại dữ liệu khác nhau trong các trường đó. Tuy nhiên, bạn nên sử dụng cùng một trường và kiểu dữ liệu trên nhiều tài liệu để có thể truy vấn tài liệu dễ dàng hơn.
Một tập hợp chỉ chứa tài liệu và không có gì khác. Tài liệu không thể trực tiếp chứa các trường thô có giá trị và không thể chứa các tập hợp khác. (Xem phần Dữ liệu phân cấp để biết nội dung giải thích về cách tạo cấu trúc cho dữ liệu phức tạp hơn trong Cloud Firestore.)
Tên của các tài liệu trong một tập hợp là duy nhất. Bạn có thể cung cấp khoá của riêng mình, chẳng hạn như mã nhận dạng người dùng, hoặc bạn có thể cho phép Cloud Firestore tự động tạo mã nhận dạng ngẫu nhiên cho bạn.
Bạn không cần phải "tạo" hoặc "xoá" bộ sưu tập. Sau khi bạn tạo tài liệu đầu tiên trong một tập hợp, tập hợp đó sẽ tồn tại. Nếu bạn xoá tất cả tài liệu trong một tập hợp, thì tập hợp đó sẽ không còn tồn tại nữa.
Tài liệu tham khảo
Mỗi tài liệu trong Cloud Firestore được xác định duy nhất theo vị trí của tài liệu đó trong cơ sở dữ liệu. Ví dụ trước cho thấy một tài liệu alovelace trong tập hợp users. Để tham chiếu đến vị trí này trong mã, bạn có thể tạo một tham chiếu đến vị trí đó.
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
Bắt đầu
PHP
PHP
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Ruby
Tham chiếu là một đối tượng gọn nhẹ, chỉ trỏ đến một vị trí trong cơ sở dữ liệu của bạn. Bạn có thể tạo tệp đối chiếu cho dù dữ liệu có tồn tại ở đó hay không và việc tạo tệp đối chiếu không thực hiện bất kỳ thao tác nào trên mạng.
Bạn cũng có thể tạo tệp đối chiếu cho bộ sưu tập:
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
Bắt đầu
PHP
PHP
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Ruby
Để thuận tiện, bạn cũng có thể tạo tệp đối chiếu bằng cách chỉ định đường dẫn đến một tài liệu hoặc tập hợp dưới dạng chuỗi, trong đó các thành phần đường dẫn được phân tách bằng dấu gạch chéo (/). Ví dụ: để tạo tệp đối chiếu đến tài liệu 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
Bắt đầu
PHP
PHP
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Ruby
Dữ liệu phân cấp
Để hiểu cách hoạt động của cấu trúc dữ liệu phân cấp trong Cloud Firestore, hãy xem xét một ứng dụng trò chuyện mẫu có tin nhắn và phòng trò chuyện.
Bạn có thể tạo một tập hợp có tên là rooms để lưu trữ nhiều phòng trò chuyện:
phòng
phòngA
name : "my chat room"phòng ngủ
...
Giờ đây, khi đã có phòng trò chuyện, bạn có thể quyết định cách lưu trữ tin nhắn. Bạn có thể không muốn lưu trữ các thông tin này trong tài liệu của phòng trò chuyện. Tài liệu trong Cloud Firestore phải gọn nhẹ và phòng trò chuyện có thể chứa một số lượng lớn tin nhắn. Tuy nhiên, bạn có thể tạo thêm các tập hợp trong tài liệu của phòng trò chuyện dưới dạng tập hợp con.
Bộ sưu tập con
Cách tốt nhất để lưu trữ tin nhắn trong trường hợp này là sử dụng tập hợp con. Bộ sưu tập con là một bộ sưu tập liên kết với một tài liệu cụ thể.
Bạn có thể tạo một tập hợp con có tên là messages cho mọi tài liệu phòng trong
tập hợp rooms:
phòng
phòngA
name : "my chat room"tin nhắn
message1
from : "alex"
msg : "Hello World!"message2
...
phòng ngủ
...
Trong ví dụ này, bạn sẽ tạo một tệp đối chiếu đến một tin nhắn trong tập hợp con bằng mã sau:
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
Bắt đầu
PHP
PHP
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Để xác thực với Cloud Firestore, hãy thiết lập Thông tin xác thực mặc định của ứng dụng. Để biết thêm thông tin, hãy xem bài viết Thiết lập quy trình xác thực cho môi trường phát triển cục bộ.
Ruby
Lưu ý mẫu luân phiên của tập hợp và tài liệu. Bộ sưu tập và tài liệu của bạn phải luôn tuân theo mẫu này. Bạn không thể tham chiếu một tập hợp trong một tập hợp hoặc một tài liệu trong một tài liệu.
Bộ sưu tập con cho phép bạn cấu trúc dữ liệu theo thứ bậc, giúp bạn dễ dàng truy cập vào dữ liệu hơn. Để nhận tất cả tin nhắn trong roomA, bạn có thể tạo một tệp đối chiếu tập hợp cho tập hợp con messages và tương tác với tệp đối chiếu đó như với bất kỳ tệp đối chiếu tập hợp nào khác.
Tài liệu trong bộ sưu tập con cũng có thể chứa bộ sưu tập con, cho phép bạn lồng dữ liệu sâu hơn. Bạn có thể lồng dữ liệu sâu tối đa 100 cấp.