Cloud Firestore adalah NoSQL, database berorientasi dokumen. Tidak seperti database SQL, tidak ada tabel atau baris. Sebagai gantinya, Anda menyimpan data dalam dokumen , yang diatur ke dalam koleksi .
Setiap dokumen berisi sekumpulan key-value pair. Cloud Firestore dioptimalkan untuk menyimpan banyak koleksi dokumen kecil.
Semua dokumen harus disimpan dalam koleksi. Dokumen dapat berisi subkoleksi dan objek bersarang, keduanya dapat menyertakan bidang primitif seperti string atau objek kompleks seperti daftar.
Koleksi dan dokumen dibuat secara implisit di Cloud Firestore. Cukup tetapkan data ke dokumen dalam koleksi. Jika koleksi atau dokumen tidak ada, Cloud Firestore akan membuatnya.
Dokumen
Di Cloud Firestore, unit penyimpanan adalah dokumen. Dokumen adalah catatan ringan yang berisi bidang, yang dipetakan ke nilai. Setiap dokumen diidentifikasi dengan nama.
Dokumen yang mewakili pengguna alovelace
mungkin terlihat seperti ini:
first : "Ada"
last : "Lovelace"
born : 1815
Kompleks, objek bersarang dalam dokumen disebut peta. Misalnya, Anda dapat menyusun nama pengguna dari contoh di atas dengan peta, seperti ini:
name :
first : "Ada"
last : "Lovelace"
born : 1815
Anda mungkin memperhatikan bahwa dokumen sangat mirip dengan JSON. Faktanya, mereka pada dasarnya. Ada beberapa perbedaan (misalnya, dokumen mendukung tipe data ekstra dan dibatasi ukurannya hingga 1 MB), tetapi secara umum, Anda dapat memperlakukan dokumen sebagai rekaman JSON yang ringan.
Koleksi
Dokumen hidup dalam koleksi, yang hanya merupakan wadah untuk dokumen. Misalnya, Anda dapat memiliki kumpulan users
untuk memuat berbagai pengguna Anda, masing-masing diwakili oleh dokumen:
pengguna
first : "Ada"
last : "Lovelace"
born : 1815
pengaturan
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore tidak memiliki skema, jadi Anda memiliki kebebasan penuh atas bidang apa yang Anda masukkan di setiap dokumen dan jenis data apa yang Anda simpan di bidang tersebut. Dokumen dalam koleksi yang sama semuanya dapat berisi bidang yang berbeda atau menyimpan tipe data yang berbeda di bidang tersebut. Namun, sebaiknya gunakan bidang dan tipe data yang sama di beberapa dokumen, sehingga Anda bisa membuat kueri dokumen dengan lebih mudah.
Koleksi berisi dokumen dan tidak ada yang lain. Itu tidak bisa langsung berisi bidang mentah dengan nilai, dan tidak bisa berisi koleksi lain. (Lihat Data Hierarkis untuk penjelasan tentang cara menyusun data yang lebih kompleks di Cloud Firestore.)
Nama-nama dokumen dalam koleksi unik. Anda dapat memberikan kunci Anda sendiri, seperti ID pengguna, atau Anda dapat mengizinkan Cloud Firestore membuatkan ID acak untuk Anda secara otomatis.
Anda tidak perlu "membuat" atau "menghapus" koleksi. Setelah Anda membuat dokumen pertama dalam koleksi, koleksi tersebut ada. Jika Anda menghapus semua dokumen dalam koleksi, itu tidak akan ada lagi.
Referensi
Setiap dokumen di Cloud Firestore diidentifikasi secara unik berdasarkan lokasinya di dalam database. Contoh sebelumnya menunjukkan sebuah dokumen alovelace
di dalam koleksi users
. Untuk merujuk ke lokasi ini dalam kode Anda, Anda dapat membuat referensi untuk itu.
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Cepat
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");
Jawa
Piton
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Pergi
PHP
PHP
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Persatuan
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Rubi
Referensi adalah objek ringan yang hanya menunjuk ke suatu lokasi di database Anda. Anda dapat membuat referensi terlepas dari apakah ada data di sana atau tidak, dan membuat referensi tidak melakukan operasi jaringan apa pun.
Anda juga dapat membuat referensi ke koleksi :
Web version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
Cepat
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");
Jawa
Piton
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Pergi
PHP
PHP
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Persatuan
CollectionReference collectionRef = db.Collection("users");
C#
C#
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Rubi
Untuk kenyamanan, Anda juga dapat membuat referensi dengan menentukan jalur ke dokumen atau kumpulan sebagai string, dengan komponen jalur yang dipisahkan oleh garis miring ( /
). Misalnya, untuk membuat referensi ke dokumen alovelace
:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
Cepat
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");
Jawa
Piton
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Pergi
PHP
PHP
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Persatuan
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Rubi
Data hierarkis
Untuk memahami cara kerja struktur data hierarkis di Cloud Firestore, pertimbangkan contoh aplikasi chat dengan pesan dan ruang chat.
Anda dapat membuat koleksi yang disebut rooms
untuk menyimpan berbagai ruang obrolan:
ruang
name : "my chat room"
ruang
...
Sekarang setelah Anda memiliki ruang obrolan, tentukan cara menyimpan pesan Anda. Anda mungkin tidak ingin menyimpannya di dokumen ruang obrolan. Dokumen di Cloud Firestore harus ringan, dan ruang obrolan dapat berisi banyak pesan. Namun, Anda dapat membuat koleksi tambahan di dalam dokumen ruang obrolan Anda, 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 kamar di koleksi rooms
Anda:
ruang
name : "my chat room"
from : "alex"
msg : "Hello World!"
...
ruang
...
Dalam contoh ini, Anda akan membuat referensi ke pesan di subkoleksi dengan kode berikut:
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');
Cepat
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");
Jawa
Piton
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Pergi
PHP
PHP
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Persatuan
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .
Rubi
Perhatikan pola koleksi dan dokumen yang berganti-ganti. Koleksi dan dokumen Anda harus selalu mengikuti pola ini. Anda tidak dapat mereferensikan koleksi dalam koleksi atau dokumen dalam dokumen.
Subkoleksi memungkinkan Anda menyusun data secara hierarkis, membuat data lebih mudah diakses. Untuk mendapatkan semua pesan di roomA
, Anda dapat membuat referensi koleksi ke messages
subkoleksi dan berinteraksi dengannya seperti yang Anda lakukan pada referensi koleksi lainnya.
Dokumen dalam subkoleksi juga dapat berisi subkoleksi, memungkinkan Anda untuk mengumpulkan data lebih lanjut. Anda dapat mengumpulkan data hingga kedalaman 100 level.