Cloud Firestore 是 NoSQL 文件取向資料庫。有別於 SQL 資料庫 就沒有任何資料表或資料列。而是將資料儲存在文件中,並將文件整理成集合。
每份文件都含有一組鍵/值組合。Cloud Firestore 是針對儲存大量小型文件的集合而最佳化。
所有文件都必須儲存在集合中。文件可包含子集合和巢狀物件,兩者皆可包含字串等基本欄位,或列表等複雜物件。
集合和文件是在 Cloud Firestore 中隱含建立。 只要將資料指派給集合中的文件即可。如果集合 或文件不存在,Cloud Firestore 會建立該項目。
文件
Cloud Firestore 中的儲存空間單位為文件。文件是 包含欄位 (對應至值的) 輕量級記錄。每份文件 藉由名稱識別
代表使用者 alovelace
的文件可能如下所示:
座情人節
first : "Ada"
last : "Lovelace"
born : 1815
文件中的複雜巢狀物件稱為地圖。舉例來說,您可以使用地圖為上述範例中的使用者名稱建立結構,如下所示:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
您可能會注意到,文件看起來很像 JSON。事實上,它們基本上就是。這兩者之間有些差異 (例如文件支援額外的資料類型, 大小上限為 1 MB),但一般來說, 這類模型
集合
文件會儲存在集合中,而集合只是文件的容器。適用對象
比方說,您可以建立一個 users
集合,其中包含不同的使用者
以文件表示
位使用者
座情人節
first : "Ada"
last : "Lovelace"
born : 1815
轉換
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore 是無結構的,因此您可以完全自由地決定在每份文件中放入哪些欄位,以及在這些欄位中儲存哪些資料類型。同一個集合中的文件可以包含不同的欄位,或在這些欄位中儲存不同類型的資料。不過,建議您使用 相同欄位和資料類型來查詢。 文件。
集合只包含文件,它無法直接包含含有值的原始欄位,也無法包含其他集合。(如要瞭解如何在 Cloud Firestore 中建立更複雜的資料結構,請參閱「階層資料」一文)。
集合中的文件名稱不得重複。您可以提供自己的 金鑰 (例如 User-ID),您也可以讓 Cloud Firestore 建立隨機 ID 不必手動調整設定
您不需要「建立」或「刪除」集合。建立第一個 集合中已有文件。如果您刪除集合中的所有文件,該集合就會消失。
參考資料
「Cloud Firestore」中的每份文件都會依其位置識別
資料庫內的資源先前的範例顯示集合 users
中的文件 alovelace
。如要在程式碼中參照這個位置,可以建立
參照。
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+KTX
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
Go
PHP
PHP
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Ruby
參照是一種輕量級物件,只會指向您 資料庫無論是否有資料,您都可以建立參照 建立參照不會執行任何網路作業。
您也可以建立集合的參照:
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+KTX
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
Go
PHP
PHP
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Ruby
為方便起見,您也可以透過指定路徑,
視為字串的文件或集合,並具有以向前分隔的路徑元件
斜線 (/
),舉例來說,如要建立 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+KTX
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
Go
PHP
PHP
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Ruby
階層式資料
如要瞭解階層式資料結構在 Cloud Firestore 中的運作方式,請考慮使用含有訊息和聊天室的聊天應用程式範例。
您可以建立名為 rooms
的集合,用於儲存不同的聊天室:
間房間
間客房 A
name : "my chat room"
roomB
...
建立聊天室後,接著請決定訊息的儲存方式。您可能不會 想將這些內容儲存在聊天室的文件中Cloud Firestore 中的文件應為輕量型,且聊天室可能包含大量訊息。不過,您可以在聊天室的文件中建立其他子集合。
子集合
在這種情況下,儲存訊息的最佳方式就是使用子集合。子集合是與特定文件相關聯的集合。
你可以為以下位置的所有會議室文件建立名為 messages
的子集合
您的 rooms
最愛:
個房間
房間 A
name : "my chat room"
則訊息
message1
from : "alex"
msg : "Hello World!"
訊息 2
...
間房間 B
...
在這個範例中,您會使用下列程式碼建立子集合中訊息的參照:
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+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");
Java
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
PHP
PHP
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
如要進一步瞭解如何安裝及建立 Cloud Firestore 用戶端,請參閱 Cloud Firestore 用戶端程式庫。
Ruby
請注意集合和文件的替換模式。你的珍藏內容 文件一律須依循這個模式無法參照集合 嵌入到文件集或文件中
子集合可讓您以階層式架構資料,方便存取資料。如要接收「roomA
」中的所有訊息,你可以建立珍藏內容參照
傳送至子集合 messages
,並像平常一樣與其互動
集合參照。
子集合中的文件也能包含子集合,方便你: 進一步保護資料您可以為資料建立巢狀結構,最深可達 100 層。