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 中的每個文件都透過其在資料庫中的位置進行唯一識別。前面的範例顯示了users
集合中的文檔alovelace
。要在程式碼中引用此位置,您可以建立對其的引用。
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")
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");
爪哇
Python
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
去
PHP
PHP
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
統一
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
紅寶石
引用是一個輕量級對象,僅指向資料庫中的某個位置。無論資料是否存在,您都可以建立引用,並且建立引用不會執行任何網路操作。
您也可以建立對集合的引用:
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")
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");
爪哇
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
去
PHP
PHP
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
統一
CollectionReference collectionRef = db.Collection("users");
C#
C#
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
紅寶石
為了方便起見,您還可以透過將文件或集合的路徑指定為字串來建立引用,路徑組成部分以正斜線 ( /
) 分隔。例如,要建立對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")
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");
爪哇
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
去
PHP
PHP
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
統一
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
紅寶石
分層數據
若要了解分層資料結構在 Cloud Firestore 中的工作原理,請考慮一個包含訊息和聊天室的範例聊天應用程式。
您可以建立一個名為rooms
的集合來儲存不同的聊天室:
A
name : "my chat room"
B
...
現在您已經有了聊天室,請決定如何儲存您的訊息。您可能不想將它們儲存在聊天室的文件中。 Cloud Firestore 中的文件應該是輕量級的,聊天室可以包含大量訊息。但是,您可以在聊天室文件中建立其他集合作為子集合。
子集合
在這種情況下儲存訊息的最佳方法是使用子集合。子集合是與特定文件關聯的集合。
您可以為rooms
集合中的每個房間文件建立一個名為messages
的子集合:
A
name : "my chat room"
留言1
from : "alex"
msg : "Hello World!"
...
B
...
在此範例中,您將使用以下程式碼建立對子集合中訊息的引用:
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")
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");
爪哇
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
去
PHP
PHP
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
統一
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
有關安裝和建立 Cloud Firestore 用戶端的更多信息,請參閱Cloud Firestore 用戶端程式庫。
紅寶石
請注意集合和文件的交替模式。您的收藏和文件必須始終遵循此模式。您不能在集合中引用集合或在文件中引用文件。
子集合可讓您分層建立數據,使數據更易於存取。若要取得roomA
中的所有訊息,您可以建立子集合messages
集合引用,並像與任何其他集合引用一樣與其進行互動。
子集合中的文件也可以包含子集合,從而允許您進一步嵌套資料。您最多可以嵌套 100 層資料。