Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Model Data Cloud Firestore

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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:

  • alovelace

    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:

  • alovelace

    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

    • alovelace

      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
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Piton
a_lovelace_ref = db.collection(u'users').document(u'alovelace')

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Pergi
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP

PHP

Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .

$document = $db->collection('samples/php/users')->document('alovelace');
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 .

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Rubi
document_ref = firestore.col("users").doc("alovelace")

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
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
let usersCollectionRef = db.collection("users")
Objective-C
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
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
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Piton
users_ref = db.collection(u'users')

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Pergi
usersRef := client.Collection("users")
PHP

PHP

Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .

$collection = $db->collection('samples/php/users');
Persatuan
CollectionReference collectionRef = db.Collection("users");
C#

C#

Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .

CollectionReference collectionRef = db.Collection("users");
Rubi
collection_ref = firestore.col "users"

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
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Piton
a_lovelace_ref = db.document(u'users/alovelace')

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Pergi
// Reference to a document with id "alovelace" in the collection "users"
alovelaceRef := client.Doc("users/alovelace")
PHP

PHP

Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .

$document = $db->document('users/alovelace');
Persatuan
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .

DocumentReference documentRef = db.Document("users/alovelace");
Rubi
document_path_ref = firestore.doc "users/alovelace"

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:

  • ruangan

    • 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:

  • ruangan

    • ruang

      name : "my chat room"

      • pesan

        • kelas1

          from : "alex"
          msg : "Hello World!"

        • kelas2

          ...

    • 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
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
Objective-C
Catatan: Produk ini tidak tersedia di watchOS dan target Cuplikan Aplikasi.
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
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Piton
room_a_ref = db.collection(u'rooms').document(u'roomA')
message_ref = room_a_ref.collection(u'messages').document(u'message1')

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Pergi
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
PHP

PHP

Untuk mengetahui selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Perpustakaan Klien Cloud Firestore .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
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 .

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Rubi
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

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.