Model data
Firestore adalah database NoSQL berorientasi dokumen. Tidak seperti database SQL, Cloud Firestore tidak memiliki tabel atau baris. Sebagai gantinya, data disimpan dalam berbagai dokumen, yang disusun menjadi koleksi.
Setiap dokumen berisi kumpulan key-value pair. Firestore dioptimalkan untuk menyimpan koleksi besar berbagai dokumen kecil.
Semua dokumen harus disimpan dalam koleksi. Dokumen dapat berisi subkoleksi dan objek bertingkat. Sementara itu, subkoleksi dan objek bertingkat dapat mencakup kolom standar (misalnya, string) atau objek kompleks (misalnya, daftar).
Koleksi dan dokumen dibuat secara implisit di Firestore. Cukup tetapkan data ke dokumen dalam koleksi. Jika koleksi atau dokumen tidak ada, Firestore akan membuatnya.
Dokumen
Di Firestore, unit penyimpanan adalah dokumen. Dokumen adalah data ringan yang berisi kolom, yang dipetakan ke nilai. Setiap dokumen diidentifikasi dengan nama.
Dokumen yang mewakili pengguna alovelace
mungkin terlihat seperti ini:
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Objek kompleks dan bertingkat dalam dokumen disebut peta. Misalnya, Anda dapat membuat struktur nama pengguna dari contoh di atas dengan peta, seperti ini:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Seperti dapat dilihat, dokumen sangat mirip dengan JSON. Faktanya, keduanya memang sangat mirip. Ada beberapa perbedaan (misalnya, dokumen mendukung jenis data tambahan dan ukurannya terbatas hingga 1 MB). Namun secara umum, Anda dapat memperlakukan dokumen sebagai data JSON ringan.
Koleksi
Dokumen berada dalam koleksi, yang merupakan container-nya. Misalnya, Anda dapat memiliki koleksi users
untuk menampung berbagai pengguna, yang masing-masing diwakili oleh dokumen:
users
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
Firestore tidak berskema, sehingga Anda bebas memilih kolom yang ingin dimasukkan ke dalam setiap dokumen dan jenis data yang ingin disimpan di kolom tersebut. Dokumen dalam koleksi yang sama dapat berisi kolom yang berbeda, atau menyimpan jenis data yang berbeda di kolom tersebut. Namun, sebaiknya gunakan kolom dan jenis data yang sama untuk beberapa dokumen, sehingga Anda dapat membuat kueri dokumen dengan lebih mudah.
Koleksi hanya berisi dokumen. Koleksi tidak dapat langsung berisi kolom mentah dengan nilai, dan tidak dapat berisi koleksi lainnya. (Lihat Data Hierarkis untuk mengetahui penjelasan tentang cara menyusun data yang lebih kompleks di Firestore.)
Nama dokumen dalam koleksi bersifat unik. Anda dapat memasukkan kunci Anda sendiri, seperti ID pengguna, atau Anda dapat membiarkan Firestore membuatkan ID acak secara otomatis.
Anda tidak perlu "membuat" atau "menghapus" koleksi. Setelah dokumen pertama dalam koleksi dibuat, koleksi tersebut akan otomatis ada. Jika semua dokumen dalam koleksi dihapus, koleksi tersebut akan otomatis terhapus.
Referensi
Setiap dokumen di Firestore dikenali secara unik berdasarkan lokasinya di dalam database. Contoh sebelumnya menunjukkan dokumen alovelace
dalam koleksi users
. Untuk merujuk ke lokasi ini dalam kode Anda, buat referensi yang menunjuk kepadanya.
Web versi 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web versi 8
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
Android
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
Android
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
Python
Python
(Asinkron)
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Referensi adalah objek ringan yang hanya menunjuk ke lokasi di database Anda. Anda dapat membuat referensi, terlepas dari ada atau tidaknya data di lokasi tersebut. Pembuatan referensi tidak akan memicu operasi jaringan.
Anda juga dapat membuat referensi ke koleksi:
Web versi 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web versi 8
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
Objective-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin+KTX
Android
val usersCollectionRef = db.collection("users")
Java
Android
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
Java
Python
Python
(Asinkron)
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk memudahkan, Anda juga dapat membuat referensi dengan menentukan jalur ke dokumen atau koleksi sebagai string, dengan komponen jalur yang dipisahkan oleh garis miring (/
). Misalnya, untuk membuat referensi ke dokumen alovelace
:
Web versi 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web versi 8
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Kotlin+KTX
Android
val alovelaceDocumentRef = db.document("users/alovelace")
Java
Android
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
Java
Python
Python
(Asinkron)
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Data Hierarkis
Untuk memahami cara kerja struktur data hierarkis di Firestore, pertimbangkan contoh aplikasi chat dengan pesan dan ruang chat.
Anda dapat membuat koleksi yang disebut rooms
untuk menyimpan berbagai ruang chat:
rooms
roomA
name : "my chat room"
roomB
...
Setelah menambahkan ruang chat, tentukan cara menyimpan pesan. Sebaiknya jangan simpan pesan di dokumen ruang chat. Dokumen di Firestore harus ringan, padahal ruang chat bisa berisi pesan dalam jumlah besar. Namun, Anda dapat membuat koleksi tambahan di dalam dokumen ruang chat sebagai subkoleksi.
Subkoleksi
Cara terbaik untuk menyimpan pesan dalam skenario ini adalah dengan menggunakan subkoleksi. Subkoleksi adalah koleksi yang terkait dengan dokumen tertentu.
Anda dapat membuat subkoleksi yang disebut messages
untuk setiap dokumen ruang di koleksi rooms
:
rooms
roomA
name : "my chat room"
messages
message1
from : "alex"
msg : "Hello World!"
message2
...
roomB
...
Dalam contoh ini, Anda akan membuat referensi ke pesan di subkoleksi dengan kode berikut:
Web versi 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web versi 8
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
Android
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Java
Android
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
(Asinkron)
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
PHP
PHP
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Untuk melakukan autentikasi ke Firestore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Perhatikan pola bergantian antara koleksi dan dokumen. Koleksi dan dokumen Anda harus selalu mengikuti pola ini. Anda tidak dapat merujuk ke suatu koleksi dalam koleksi atau merujuk ke suatu dokumen dalam dokumen.
Dengan subkoleksi, Anda dapat menyusun data secara hierarkis, sehingga membuat data lebih mudah diakses. Untuk mendapatkan semua pesan di roomA
, Anda dapat membuat referensi koleksi ke subkoleksi messages
dan berinteraksi dengannya sama seperti saat menggunakan referensi koleksi lainnya.
Dokumen dalam subkoleksi dapat berisi subkoleksi juga, sehingga Anda dapat membuat data makin bertingkat. Anda dapat membuat data bertingkat hingga kedalaman 100 tingkat.