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

Cloud Firestore adalah database berorientasi dokumen NoSQL. Tidak seperti database SQL, tidak ada tabel atau baris. Sebagai gantinya, Anda menyimpan data dalam dokumen , yang diatur ke dalam koleksi .

Setiap dokumen berisi satu set pasangan kunci-nilai. 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 alovelace pengguna 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 tambahan dan ukurannya dibatasi hingga 1 MB), tetapi secara umum, Anda dapat memperlakukan dokumen sebagai catatan JSON yang ringan.

Koleksi

Dokumen hidup dalam koleksi, yang hanya merupakan wadah untuk dokumen. Misalnya, Anda dapat memiliki koleksi users untuk menampung berbagai pengguna Anda, masing-masing diwakili oleh dokumen:

  • pengguna

    • alovelace

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • aturing

      first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore tidak memiliki skema, sehingga Anda memiliki kebebasan penuh atas bidang apa yang Anda masukkan ke dalam 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 dapat 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 Hierarki untuk penjelasan tentang cara menyusun data yang lebih kompleks di Cloud Firestore.)

Nama dokumen dalam koleksi bersifat unik. Anda dapat memberikan kunci Anda sendiri, seperti ID pengguna, atau Anda dapat membiarkan Cloud Firestore membuat ID acak untuk Anda secara otomatis.

Anda tidak perlu "membuat" atau "menghapus" koleksi. Setelah Anda membuat dokumen pertama dalam koleksi, koleksi akan ada. Jika Anda menghapus semua dokumen dalam koleksi, itu tidak ada lagi.

Referensi

Setiap dokumen di Cloud Firestore diidentifikasi secara unik berdasarkan lokasinya di dalam database. Contoh sebelumnya menunjukkan alovelace dokumen dalam koleksi users . Untuk merujuk ke lokasi ini dalam kode Anda, Anda dapat membuat referensi ke sana.

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 target watchOS dan App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Kotlin+KTX

val 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");
Python
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 informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka Klien Cloud Firestore .

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

C#

Untuk informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka 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 lokasi di database Anda. Anda dapat membuat referensi 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 target watchOS dan App Clip.
let usersCollectionRef = db.collection("users")
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Java

CollectionReference usersCollectionRef = db.collection("users");

Kotlin+KTX

val usersCollectionRef = db.collection("users")

Dart

final usersCollectionRef = db.collection("users");
Jawa
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
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 informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka Klien Cloud Firestore .

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

C#

Untuk informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka 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 koleksi sebagai string, dengan komponen jalur 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 target watchOS dan App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Java

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Kotlin+KTX

val 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");
Python
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 informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka Klien Cloud Firestore .

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

C#

Untuk informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka Klien Cloud Firestore .

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

Data Hirarki

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 ruang obrolan yang berbeda:

  • kamar

    • ruang

      name : "my chat room"

    • ruang

      ...

Sekarang setelah Anda memiliki ruang obrolan, putuskan bagaimana 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 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 ruangan di koleksi rooms Anda:

  • kamar

    • 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 target watchOS dan App Clip.
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
Objective-C
Catatan: Produk ini tidak tersedia di target watchOS dan App Clip.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Java

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Kotlin+KTX

val 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");
Python
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 informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka 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 informasi selengkapnya tentang menginstal dan membuat klien Cloud Firestore, lihat Pustaka 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 bolak-balik dari koleksi dan dokumen. Koleksi dan dokumen Anda harus selalu mengikuti pola ini. Anda tidak bisa 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.