Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Memulai Cloud Firestore

Panduan memulai ini menunjukkan cara menyiapkan Cloud Firestore, menambahkan data, lalu melihat data yang baru saja ditambahkan di Firebase console.

Membuat database Cloud Firestore

  1. Jika Anda belum melakukannya, buat project Firebase: Di Firebase console, klik Tambahkan project, lalu ikuti petunjuk di layar untuk membuat project Firebase atau untuk menambahkan layanan Firebase ke project GCP yang ada.

  2. Buka bagian Cloud Firestore di Firebase console. Anda akan diminta untuk memilih project Firebase yang ada. Ikuti alur kerja pembuatan database.

  3. Pilih mode mulai untuk Aturan Keamanan Cloud Firestore Anda:

    Mode pengujian

    Cocok untuk memulai dengan library klien seluler dan web, tetapi memungkinkan siapa pun untuk membaca dan menimpa data Anda. Setelah melakukan pengujian, pastikan untuk meninjau bagian Mengamankan data Anda.

    Untuk memulai dengan web, iOS, atau Android SDK, pilih mode pengujian.

    Mode terkunci

    Menolak semua pembacaan dan penulisan dari klien seluler dan web. Server aplikasi terautentikasi (C#, Go, Java, Node.js, PHP, Python, atau Ruby) masih dapat mengakses database Anda.

    Untuk memulai dengan library klien server C#, Go, Java, Node.js, PHP, Python, atau Ruby, pilih mode terkunci.

  4. Pilih lokasi untuk database Anda.

    • Setelan lokasi ini adalah lokasi resource Google Cloud Platform (GCP) default project Anda. Perlu diperhatikan bahwa lokasi ini akan digunakan untuk layanan GCP di project Anda yang memerlukan setelan lokasi, khususnya, bucket Cloud Storage default dan aplikasi App Engine (yang diperlukan jika Anda menggunakan Cloud Scheduler).

    • Jika tidak dapat memilih lokasi, project Anda sudah memiliki lokasi resource GCP default. Lokasi ditetapkan baik selama pembuatan project atau ketika menyiapkan layanan lain yang memerlukan setelan lokasi.

  5. Klik Selesai.

Saat Anda mengaktifkan Cloud Firestore, API di Pengelola Cloud API juga akan aktif.

Menyiapkan lingkungan pengembangan

Tambahkan dependensi dan library klien yang dibutuhkan ke aplikasi Anda.

Web v8

  1. Ikuti petunjuk untuk menambahkan Firebase ke aplikasi Web Anda.
  2. Tambahkan library Firebase dan Cloud Firestore ke aplikasi Anda:
    <script src="https://www.gstatic.com/firebasejs/8.4.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.4.1/firebase-firestore.js"></script>
    Cloud Firestore SDK juga tersedia sebagai paket npm.
    npm install firebase@8.4.1 --save
    
    Anda harus mewajibkan Firebase dan Cloud Firestore secara manual.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

Web v9

  1. Ikuti petunjuk untuk menambahkan Firebase ke aplikasi Web Anda.
  2. Cloud Firestore SDK tersedia sebagai paket npm.
    npm install firebase@9.0.0-beta.1 --save
    
    Anda harus mengimpor Firebase dan Cloud Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS
  1. Ikuti petunjuk untuk menambahkan Firebase ke aplikasi iOS Anda.
  2. Tambahkan pod Cloud Firestore ke PodfileAnda
    pod 'Firebase/Firestore'
    
    # Optionally, include the Swift extensions if you're using Swift.
    pod 'FirebaseFirestoreSwift'
    
  3. Simpan file dan jalankan pod install.

Java

  1. Ikuti petunjuk untuk menambahkan Firebase ke aplikasi Android Anda.
  2. Dengan Firebase Android BoM, deklarasikan dependensi untuk library Android Cloud Firestore di file Gradle modul (level aplikasi) (biasanya app/build.gradle).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.1.0')
    
        // Declare the dependency for the Cloud Firestore library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-firestore'
    }
    

    Dengan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi Anda, sebaiknya gunakan BoM untuk mengelola versi library yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Declare the dependency for the Cloud Firestore library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-firestore:22.1.2'
    }
    

Kotlin+KTX

  1. Ikuti petunjuk untuk menambahkan Firebase ke aplikasi Android Anda.
  2. Dengan Firebase Android BoM, deklarasikan dependensi untuk library Android Cloud Firestore di file Gradle modul (level aplikasi) (biasanya app/build.gradle).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.1.0')
    
        // Declare the dependency for the Cloud Firestore library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-firestore-ktx'
    }
    

    Dengan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi Anda, sebaiknya gunakan BoM untuk mengelola versi library yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Declare the dependency for the Cloud Firestore library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-firestore-ktx:22.1.2'
    }
    
Java
  1. Tambahkan Firebase Admin SDK ke aplikasi Anda:
    • Menggunakan Gradle:
      compile 'com.google.firebase:firebase-admin:7.1.1'
      
    • Menggunakan Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>7.1.1</version>
      </dependency>
           
  2. Ikuti petunjuk di bawah ini untuk melakukan inisialisasi pada Cloud Firestore dengan kredensial yang tepat di lingkungan Anda.
Python
  1. Tambahkan Firebase Admin SDK ke aplikasi Python Anda:
    pip install --upgrade firebase-admin
  2. Ikuti petunjuk di bawah ini untuk melakukan inisialisasi pada Cloud Firestore dengan kredensial yang tepat di lingkungan Anda.
C++
  1. Ikuti petunjuk untuk menambahkan Firebase ke project C++ Anda.
  2. Antarmuka C++ untuk Android.
    • Dependensi Gradle Tambahkan kode berikut ke file Gradle modul (level aplikasi) Anda (biasanya app/build.gradle):
              android.defaultConfig.externalNativeBuild.cmake {
                arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
              }
      
              apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
              firebaseCpp.dependencies {
                // earlier entries
                auth
                firestore
              }
              
    • Dependensi biner. Demikian pula, cara yang direkomendasikan untuk mendapatkan dependensi biner adalah dengan menambahkan kode berikut ke file CMakeLists.txt Anda:
              add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
              set(firebase_libs firebase_auth firebase_firestore firebase_app)
              # Replace the target name below with the actual name of your target,
              # for example, "native-lib".
              target_link_libraries(${YOUR_TARGET_NAME_HERE} "${firebase_libs}")
              
  3. Untuk menyiapkan integrasi desktop, baca bagian Menambahkan Firebase ke project C++ Anda.
Unity
  1. Ikuti petunjuk untuk menambahkan Firebase ke project Unity Anda.
  2. Antarmuka Unity untuk Android.
  3. Saat membuat aplikasi untuk Android, aktifkan ProGuard untuk menghindari batas DEX Android. Untuk melakukannya, di editor Unity:

    1. Pilih File > Build Settings
    2. Alihkan 'Platform' ke 'Android' dan klik 'Switch Platform'
    3. Klik ‘Player Settings…’
    4. Di UI Unity utama, di bawah 'Settings for Android', pilih 'Publishing Settings'
    5. Di bagian 'Minify', ubah setelan Release dan Debug dari 'None' menjadi 'ProGuard'
Node.js
  1. Tambahkan Firebase Admin SDK ke aplikasi Anda:
    npm install firebase-admin --save
  2. Ikuti petunjuk di bawah ini untuk melakukan inisialisasi pada Cloud Firestore dengan kredensial yang tepat di lingkungan Anda.
Go
  1. Tambahkan Firebase Admin SDK ke aplikasi Go Anda:
    go get firebase.google.com/go
    
  2. Ikuti petunjuk di bawah ini untuk melakukan inisialisasi pada Cloud Firestore dengan kredensial yang tepat di lingkungan Anda.
PHP
  1. Library klien server Cloud Firestore (Java, Node.js, Python, Go, PHP, C#, dan Ruby) menggunakan Kredensial Default Aplikasi Google untuk melakukan autentikasi.
    • Untuk mengautentikasi dari lingkungan pengembangan, atur agar variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS mengarah ke file kunci akun layanan JSON. Anda dapat membuat file kunci di halaman Kredensial Konsol API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Anda tidak perlu melakukan autentikasi jika menjalankan aplikasi pada App Engine atau Compute Engine di lingkungan produksi, menggunakan project yang sama dengan yang digunakan untuk Cloud Firestore. Jika menggunakan project berbeda, siapkan akun layanan.
  2. Instal dan aktifkan ekstensi gRPC untuk PHP, yang akan Anda perlukan untuk menggunakan library klien.
  3. Tambahkan library PHP Cloud Firestore ke aplikasi Anda:
    composer require google/cloud-firestore
C#
  1. Library klien server Cloud Firestore (Java, Node.js, Python, Go, PHP, C#, dan Ruby) menggunakan Kredensial Default Aplikasi Google untuk melakukan autentikasi.
    • Untuk mengautentikasi dari lingkungan pengembangan, atur agar variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS mengarah ke file kunci akun layanan JSON. Anda dapat membuat file kunci di halaman Kredensial Konsol API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Anda tidak perlu melakukan autentikasi jika menjalankan aplikasi pada App Engine atau Compute Engine di lingkungan produksi, menggunakan project yang sama dengan yang digunakan untuk Cloud Firestore. Jika menggunakan project berbeda, siapkan akun layanan.
  2. Tambahkan library C# Cloud Firestore ke aplikasi Anda di file .csproj:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Tambahkan kode berikut ke file Program.cs Anda:
    using Google.Cloud.Firestore;
Ruby
  1. Library klien server Cloud Firestore (Java, Node.js, Python, Go, PHP, C#, dan Ruby) menggunakan Kredensial Default Aplikasi Google untuk melakukan autentikasi.
    • Untuk mengautentikasi dari lingkungan pengembangan, atur agar variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS mengarah ke file kunci akun layanan JSON. Anda dapat membuat file kunci di halaman Kredensial Konsol API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Anda tidak perlu melakukan autentikasi jika menjalankan aplikasi pada App Engine atau Compute Engine di lingkungan produksi, menggunakan project yang sama dengan yang digunakan untuk Cloud Firestore. Jika menggunakan project berbeda, siapkan akun layanan.
  2. Tambahkan library Ruby Cloud Firestore ke aplikasi Anda di Gemfile:
    gem "google-cloud-firestore"
  3. Instal dependensi dari Gemfile menggunakan:
    bundle install

(Opsional) Membuat prototipe dan melakukan pengujian dengan Firebase Local Emulator Suite

Bagi developer seluler, sebelum membahas cara aplikasi Anda menulis ke dan membaca dari Cloud Firestore, perkenalkan Firebase Local Emulator Suite yang merupakan sekumpulan alat yang dapat Anda gunakan untuk membuat prototipe dan menguji fungsionalitas Cloud Firestore. Jika Anda mencoba berbagai model data, mengoptimalkan aturan keamanan, atau berupaya menemukan cara yang paling hemat untuk berinteraksi dengan backend, akan sangat bermanfaat jika Anda dapat bekerja secara lokal tanpa men-deploy layanan langsung.

Emulator Cloud Firestore adalah bagian dari Local Emulator Suite yang memungkinkan aplikasi berinteraksi dengan konfigurasi dan konten database teremulasi, serta secara opsional resource project teremulasi (fungsi, database lain, dan aturan keamanan). Perhatikan bahwa Local Emulator Suite belum mendukung Cloud Storage teremulasi.

Penggunaan emulator Cloud Firestore hanya memerlukan beberapa langkah:

  1. Menambahkan baris kode ke konfigurasi pengujian aplikasi untuk terhubung ke emulator.
  2. Menjalankan firebase emulators:start dari root direktori project lokal Anda.
  3. Membuat panggilan dari kode prototipe aplikasi Anda menggunakan SDK platform Cloud Firestore seperti biasa.

Panduan mendetail yang mencakup Cloud Firestore dan Cloud Functions telah tersedia. Sebaiknya baca juga Pengantar Local Emulator Suite.

Menginisialisasi Cloud Firestore

Melakukan inisialisasi pada instance Cloud Firestore:

Web v8

// Initialize Cloud Firestore through Firebase
firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

var db = firebase.firestore();
Nilai untuk `initializeApp` dapat ditemukan di `firebaseConfig` aplikasi web Anda. Untuk mempertahankan data saat perangkat kehilangan koneksi, lihat dokumentasi Mengaktifkan Data Offline.

Web v9

// Initialize Cloud Firestore through Firebase
import { initializeApp } from "firebase/app"
import { getFirestore } from "firebase/firestore"
const firebaseApp = initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

const db = getFirestore();
Nilai untuk `initializeApp` dapat ditemukan di `firebaseConfig` aplikasi web Anda. Untuk mempertahankan data saat perangkat kehilangan koneksi, lihat dokumentasi Mengaktifkan Data Offline.
Swift
import Firebase
FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
@import Firebase;

// Use Firebase library to configure APIs
[FIRApp configure];
  
FIRFirestore *defaultFirestore = [FIRFirestore firestore];

Java

// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();

Kotlin+KTX

// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore
Java
Inisialisasi Cloud Firestore SDK dilakukan dengan cara yang berbeda, bergantung pada lingkungan Anda. Berikut adalah metode yang paling umum. Untuk referensi yang lebih lengkap, baca bagian Melakukan Inisialisasi Admin SDK.
  • Melakukan inisialisasi pada Google Cloud Platform
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use the application default credentials
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .setProjectId(projectId)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
    
  • Melakukan inisialisasi pada server Anda sendiri

    Untuk menggunakan Firebase Admin SDK pada server Anda sendiri, gunakan akun layanan.

    Buka IAM & admin > Akun layanan di Cloud Platform Console. Buat kunci pribadi baru dan simpan file JSON. Lalu gunakan file tersebut untuk melakukan inisialisasi SDK:

    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use a service account
    InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
    
  • Python
    Inisialisasi Cloud Firestore SDK dilakukan dengan cara yang berbeda, bergantung pada lingkungan Anda. Berikut adalah metode yang paling umum. Untuk referensi yang lebih lengkap, baca bagian Melakukan Inisialisasi Admin SDK.
  • Melakukan inisialisasi pada Google Cloud Platform
    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials
    cred = credentials.ApplicationDefault()
    firebase_admin.initialize_app(cred, {
      'projectId': project_id,
    })
    
    db = firestore.client()
    
  • Melakukan inisialisasi pada server Anda sendiri

    Untuk menggunakan Firebase Admin SDK pada server Anda sendiri, gunakan akun layanan.

    Buka IAM & admin > Akun layanan di Cloud Platform Console. Buat kunci pribadi baru dan simpan file JSON. Lalu gunakan file tersebut untuk melakukan inisialisasi SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account
    cred = credentials.Certificate('path/to/serviceAccount.json')
    firebase_admin.initialize_app(cred)
    
    db = firestore.client()
    
  • C++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
    App::Create();
    Firestore* db = Firestore::GetInstance();
    Node.js
    Inisialisasi Cloud Firestore SDK dilakukan dengan cara yang berbeda, bergantung pada lingkungan Anda. Berikut adalah metode yang paling umum. Untuk referensi yang lebih lengkap, baca bagian Melakukan Inisialisasi Admin SDK.
    • Melakukan inisialisasi pada Cloud Functions
      const admin = require('firebase-admin');
      admin.initializeApp();
      
      const db = admin.firestore();
      
    • Melakukan inisialisasi pada Google Cloud Platform
      const admin = require('firebase-admin');
      admin.initializeApp({
        credential: admin.credential.applicationDefault()
      });
      
      const db = admin.firestore();
    • Melakukan inisialisasi pada server Anda sendiri

      Untuk menggunakan Firebase Admin SDK pada server Anda sendiri (atau lingkungan Node.js lainnya), gunakan akun layanan. Buka IAM & admin > Akun layanan di Cloud Platform Console. Buat kunci pribadi baru dan simpan file JSON. Lalu gunakan file tersebut untuk melakukan inisialisasi SDK:

      const admin = require('firebase-admin');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      admin.initializeApp({
        credential: admin.credential.cert(serviceAccount)
      });
      
      const db = admin.firestore();
      
    Go
    Inisialisasi Cloud Firestore SDK dilakukan dengan cara yang berbeda, bergantung pada lingkungan Anda. Berikut adalah metode yang paling umum. Untuk referensi yang lebih lengkap, baca bagian Melakukan Inisialisasi Admin SDK.
  • Melakukan inisialisasi pada Google Cloud Platform
    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use the application default credentials
    ctx := context.Background()
    conf := &firebase.Config{ProjectID: projectID}
    app, err := firebase.NewApp(ctx, conf)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
    
  • Melakukan inisialisasi pada server Anda sendiri

    Untuk menggunakan Firebase Admin SDK pada server Anda sendiri, gunakan akun layanan.

    Buka IAM & admin > Akun layanan di Cloud Platform Console. Buat kunci pribadi baru dan simpan file JSON. Lalu gunakan file tersebut untuk melakukan inisialisasi SDK:

    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use a service account
    ctx := context.Background()
    sa := option.WithCredentialsFile("path/to/serviceAccount.json")
    app, err := firebase.NewApp(ctx, nil, sa)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
    
  • PHP
    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     * ```
     * initialize();
     * ```
     */
    function initialize()
    {
        // Create the Cloud Firestore client
        $db = new FirestoreClient();
        printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
    }
    Unity
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    C#
    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Ruby
    require "google/cloud/firestore"
    
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

    Tambahkan data

    Cloud Firestore menyimpan data dalam Dokumen yang disimpan di Koleksi. Cloud Firestore membuat koleksi dan dokumen secara implisit saat pertama kali Anda menambahkan data ke dokumen. Anda tidak perlu secara eksplisit membuat koleksi atau dokumen.

    Buat koleksi dan dokumen baru menggunakan kode contoh berikut.

    Web v8

    db.collection("users").add({
        first: "Ada",
        last: "Lovelace",
        born: 1815
    })
    .then((docRef) => {
        console.log("Document written with ID: ", docRef.id);
    })
    .catch((error) => {
        console.error("Error adding document: ", error);
    });

    Web v9

    import { collection, addDoc } from "firebase/firestore";
    
    try {
      const docRef = await addDoc(collection(db, "users"), {
        first: "Ada",
        last: "Lovelace",
        born: 1815
      });
      console.log("Document written with ID: ", docRef.id);
    } catch (e) {
      console.error("Error adding document: ", e);
    }
    Swift
    // Add a new document with a generated ID
    var ref: DocumentReference? = nil
    ref = db.collection("users").addDocument(data: [
        "first": "Ada",
        "last": "Lovelace",
        "born": 1815
    ]) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID: \(ref!.documentID)")
        }
    }
    Objective-C
    // Add a new document with a generated ID
    __block FIRDocumentReference *ref =
        [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
          @"first": @"Ada",
          @"last": @"Lovelace",
          @"born": @1815
        } completion:^(NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error adding document: %@", error);
          } else {
            NSLog(@"Document added with ID: %@", ref.documentID);
          }
        }];

    Java

    // Create a new user with a first and last name
    Map<String, Object> user = new HashMap<>();
    user.put("first", "Ada");
    user.put("last", "Lovelace");
    user.put("born", 1815);
    
    // Add a new document with a generated ID
    db.collection("users")
            .add(user)
            .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                @Override
                public void onSuccess(DocumentReference documentReference) {
                    Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.w(TAG, "Error adding document", e);
                }
            });

    Kotlin+KTX

    // Create a new user with a first and last name
    val user = hashMapOf(
            "first" to "Ada",
            "last" to "Lovelace",
            "born" to 1815
    )
    
    // Add a new document with a generated ID
    db.collection("users")
        .add(user)
        .addOnSuccessListener { documentReference ->
            Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
        }
        .addOnFailureListener { e ->
            Log.w(TAG, "Error adding document", e)
        }
    Java
    DocumentReference docRef = db.collection("users").document("alovelace");
    // Add document data  with id "alovelace" using a hashmap
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Ada");
    data.put("last", "Lovelace");
    data.put("born", 1815);
    //asynchronously write data
    ApiFuture<WriteResult> result = docRef.set(data);
    // ...
    // result.get() blocks on response
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection(u'users').document(u'alovelace')
    doc_ref.set({
        u'first': u'Ada',
        u'last': u'Lovelace',
        u'born': 1815
    })
    C++
    // Add a new document with a generated ID
    Future<DocumentReference> user_ref =
        db->Collection("users").Add({{"first", FieldValue::String("Ada")},
                                     {"last", FieldValue::String("Lovelace")},
                                     {"born", FieldValue::Integer(1815)}});
    
    user_ref.OnCompletion([](const Future<DocumentReference>& future) {
      if (future.error() == Error::kErrorOk) {
        std::cout << "DocumentSnapshot added with ID: " << future.result()->id()
                  << '\n';
      } else {
        std::cout << "Error adding document: " << future.error_message() << '\n';
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Go
    _, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
    	"first": "Ada",
    	"last":  "Lovelace",
    	"born":  1815,
    })
    if err != nil {
    	log.Fatalf("Failed adding alovelace: %v", err)
    }
    PHP
    $docRef = $db->collection('users')->document('lovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    Unity
    DocumentReference docRef = db.Collection("users").Document("alovelace");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
    	{ "First", "Ada" },
    	{ "Last", "Lovelace" },
    	{ "Born", 1815 },
    };
    docRef.SetAsync(user).ContinueWithOnMainThread(task => {
    	Debug.Log("Added data to the alovelace document in the users collection.");
    });
    C#
    DocumentReference docRef = db.Collection("users").Document("alovelace");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Ada" },
        { "Last", "Lovelace" },
        { "Born", 1815 }
    };
    await docRef.SetAsync(user);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/alovelace"
    
    doc_ref.set(
      {
        first: "Ada",
        last:  "Lovelace",
        born:  1815
      }
    )
    
    puts "Added data to the alovelace document in the users collection."

    Sekarang tambahkan dokumen lain ke koleksi users. Perhatikan bahwa dokumen ini berisi key-value pair (nama tengah) yang tidak muncul di dokumen pertama. Dokumen dalam koleksi dapat berisi kumpulan informasi yang berbeda.

    Web v8

    // Add a second document with a generated ID.
    db.collection("users").add({
        first: "Alan",
        middle: "Mathison",
        last: "Turing",
        born: 1912
    })
    .then((docRef) => {
        console.log("Document written with ID: ", docRef.id);
    })
    .catch((error) => {
        console.error("Error adding document: ", error);
    });

    Web v9

    // Add a second document with a generated ID.
    import { addDoc, collection } from "firebase/firestore";
    
    try {
      const docRef = await addDoc(collection(db, "users"), {
        first: "Alan",
        middle: "Mathison",
        last: "Turing",
        born: 1912
      });
    
      console.log("Document written with ID: ", docRef.id);
    } catch (e) {
      console.error("Error adding document: ", e);
    }
    Swift
    // Add a second document with a generated ID.
    ref = db.collection("users").addDocument(data: [
        "first": "Alan",
        "middle": "Mathison",
        "last": "Turing",
        "born": 1912
    ]) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID: \(ref!.documentID)")
        }
    }
    Objective-C
    // Add a second document with a generated ID.
    __block FIRDocumentReference *ref =
        [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
          @"first": @"Alan",
          @"middle": @"Mathison",
          @"last": @"Turing",
          @"born": @1912
        } completion:^(NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error adding document: %@", error);
          } else {
            NSLog(@"Document added with ID: %@", ref.documentID);
          }
        }];

    Java

    // Create a new user with a first, middle, and last name
    Map<String, Object> user = new HashMap<>();
    user.put("first", "Alan");
    user.put("middle", "Mathison");
    user.put("last", "Turing");
    user.put("born", 1912);
    
    // Add a new document with a generated ID
    db.collection("users")
            .add(user)
            .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                @Override
                public void onSuccess(DocumentReference documentReference) {
                    Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.w(TAG, "Error adding document", e);
                }
            });

    Kotlin+KTX

    // Create a new user with a first, middle, and last name
    val user = hashMapOf(
            "first" to "Alan",
            "middle" to "Mathison",
            "last" to "Turing",
            "born" to 1912
    )
    
    // Add a new document with a generated ID
    db.collection("users")
        .add(user)
        .addOnSuccessListener { documentReference ->
            Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
        }
        .addOnFailureListener { e ->
            Log.w(TAG, "Error adding document", e)
        }
    Java
    DocumentReference docRef = db.collection("users").document("aturing");
    // Add document data with an additional field ("middle")
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Alan");
    data.put("middle", "Mathison");
    data.put("last", "Turing");
    data.put("born", 1912);
    
    ApiFuture<WriteResult> result = docRef.set(data);
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection(u'users').document(u'aturing')
    doc_ref.set({
        u'first': u'Alan',
        u'middle': u'Mathison',
        u'last': u'Turing',
        u'born': 1912
    })
    C++
    db->Collection("users")
        .Add({{"first", FieldValue::String("Alan")},
              {"middle", FieldValue::String("Mathison")},
              {"last", FieldValue::String("Turing")},
              {"born", FieldValue::Integer(1912)}})
        .OnCompletion([](const Future<DocumentReference>& future) {
          if (future.error() == Error::kErrorOk) {
            std::cout << "DocumentSnapshot added with ID: "
                      << future.result()->id() << '\n';
          } else {
            std::cout << "Error adding document: " << future.error_message()
                      << '\n';
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Go
    _, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
    	"first":  "Alan",
    	"middle": "Mathison",
    	"last":   "Turing",
    	"born":   1912,
    })
    if err != nil {
    	log.Fatalf("Failed adding aturing: %v", err)
    }
    PHP
    $docRef = $db->collection('users')->document('aturing');
    $docRef->set([
        'first' => 'Alan',
        'middle' => 'Mathison',
        'last' => 'Turing',
        'born' => 1912
    ]);
    printf('Added data to the aturing document in the users collection.' . PHP_EOL);
    Unity
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
    	{ "First", "Alan" },
    	{ "Middle", "Mathison" },
    	{ "Last", "Turing" },
    	{ "Born", 1912 }
    };
    docRef.SetAsync(user).ContinueWithOnMainThread(task => {
    	Debug.Log("Added data to the aturing document in the users collection.");
    });
    C#
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Alan" },
        { "Middle", "Mathison" },
        { "Last", "Turing" },
        { "Born", 1912 }
    };
    await docRef.SetAsync(user);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/aturing"
    
    doc_ref.set(
      {
        first:  "Alan",
        middle: "Mathison",
        last:   "Turing",
        born:   1912
      }
    )
    
    puts "Added data to the aturing document in the users collection."

    Membaca data

    Untuk memverifikasi dengan cepat bahwa Anda telah menambahkan data ke Cloud Firestore, gunakan penampil data di Firebase console.

    Anda juga dapat menggunakan metode "get" untuk mengambil seluruh koleksi.

    Web v8

    db.collection("users").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
        });
    });

    Web v9

    import { collection, getDocs } from "firebase/firestore";
    
    const querySnapshot = await getDocs(collection(db, "users"));
    querySnapshot.forEach((doc) => {
      console.log(`${doc.id} => ${doc.data()}`);
    });
    Swift
    db.collection("users").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
    }
    Objective-C
    [[self.db collectionWithPath:@"users"]
        getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot,
                                     NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error getting documents: %@", error);
          } else {
            for (FIRDocumentSnapshot *document in snapshot.documents) {
              NSLog(@"%@ => %@", document.documentID, document.data);
            }
          }
        }];

    Java

    db.collection("users")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.d(TAG, document.getId() + " => " + document.getData());
                        }
                    } else {
                        Log.w(TAG, "Error getting documents.", task.getException());
                    }
                }
            });

    Kotlin+KTX

    db.collection("users")
            .get()
            .addOnSuccessListener { result ->
                for (document in result) {
                    Log.d(TAG, "${document.id} => ${document.data}")
                }
            }
            .addOnFailureListener { exception ->
                Log.w(TAG, "Error getting documents.", exception)
            }
    Java
    // asynchronously retrieve all users
    ApiFuture<QuerySnapshot> query = db.collection("users").get();
    // ...
    // query.get() blocks on response
    QuerySnapshot querySnapshot = query.get();
    List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      System.out.println("User: " + document.getId());
      System.out.println("First: " + document.getString("first"));
      if (document.contains("middle")) {
        System.out.println("Middle: " + document.getString("middle"));
      }
      System.out.println("Last: " + document.getString("last"));
      System.out.println("Born: " + document.getLong("born"));
    }
    Python
    users_ref = db.collection(u'users')
    docs = users_ref.stream()
    
    for doc in docs:
        print(f'{doc.id} => {doc.to_dict()}')
    C++
    Future<QuerySnapshot> users = db->Collection("users").Get();
    users.OnCompletion([](const Future<QuerySnapshot>& future) {
      if (future.error() == Error::kErrorOk) {
        for (const DocumentSnapshot& document : future.result()->documents()) {
          std::cout << document << '\n';
        }
      } else {
        std::cout << "Error getting documents: " << future.error_message()
                  << '\n';
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Go
    iter := client.Collection("users").Documents(ctx)
    for {
    	doc, err := iter.Next()
    	if err == iterator.Done {
    		break
    	}
    	if err != nil {
    		log.Fatalf("Failed to iterate: %v", err)
    	}
    	fmt.Println(doc.Data())
    }
    PHP
    $usersRef = $db->collection('users');
    $snapshot = $usersRef->documents();
    foreach ($snapshot as $user) {
        printf('User: %s' . PHP_EOL, $user->id());
        printf('First: %s' . PHP_EOL, $user['first']);
        if (!empty($user['middle'])) {
            printf('Middle: %s' . PHP_EOL, $user['middle']);
        }
        printf('Last: %s' . PHP_EOL, $user['last']);
        printf('Born: %d' . PHP_EOL, $user['born']);
        printf(PHP_EOL);
    }
    printf('Retrieved and printed out all documents from the users collection.' . PHP_EOL);
    Unity
    CollectionReference usersRef = db.Collection("users");
    usersRef.GetSnapshotAsync().ContinueWithOnMainThread(task =>
    {
      QuerySnapshot snapshot = task.Result;
      foreach (DocumentSnapshot document in snapshot.Documents)
      {
        Debug.Log(String.Format("User: {0}", document.Id));
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Debug.Log(String.Format("First: {0}", documentDictionary["First"]));
        if (documentDictionary.ContainsKey("Middle"))
        {
          Debug.Log(String.Format("Middle: {0}", documentDictionary["Middle"]));
        }
    
        Debug.Log(String.Format("Last: {0}", documentDictionary["Last"]));
        Debug.Log(String.Format("Born: {0}", documentDictionary["Born"]));
      }
    
      Debug.Log("Read all data from the users collection.");
    });
    C#
    CollectionReference usersRef = db.Collection("users");
    QuerySnapshot snapshot = await usersRef.GetSnapshotAsync();
    foreach (DocumentSnapshot document in snapshot.Documents)
    {
        Console.WriteLine("User: {0}", document.Id);
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Console.WriteLine("First: {0}", documentDictionary["First"]);
        if (documentDictionary.ContainsKey("Middle"))
        {
            Console.WriteLine("Middle: {0}", documentDictionary["Middle"]);
        }
        Console.WriteLine("Last: {0}", documentDictionary["Last"]);
        Console.WriteLine("Born: {0}", documentDictionary["Born"]);
        Console.WriteLine();
    }
    Ruby
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    Melindungi data

    Jika Anda menggunakan Web, Android, atau iOS SDK, gunakan Firebase Authentication dan Aturan Keamanan Cloud Firestore untuk mengamankan data Anda di Cloud Firestore.

    Berikut adalah beberapa kumpulan aturan dasar yang dapat Anda gunakan untuk memulai. Anda dapat mengubah aturan keamanan di tab Aturan di konsol.

    Auth diperlukan

    // Allow read/write access on all documents to any user signed in to the application
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth != null;
        }
      }
    }
    

    Mode terkunci

    // Deny read/write access to all users under any conditions
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if false;
        }
      }
    }
    

    Mode pengujian

    // Allow read/write access to all users under any conditions
    // Warning: **NEVER** use this rule set in production; it allows
    // anyone to overwrite your entire database.
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }
    

    Jika Anda menggunakan salah satu SDK server, gunakan Identity and Access Management (IAM) untuk mengamankan data di Cloud Firestore.

    Menonton video tutorial

    Untuk mendapatkan panduan terperinci tentang cara memulai library klien seluler dan web Cloud Firestore, silakan tonton salah satu video tutorial berikut:

    Web v8

    iOS
    Android

    Anda dapat menemukan lebih banyak video di channel YouTube Firebase.

    Langkah berikutnya

    Perdalam pengetahuan Anda tentang topik berikut:

    • Codelabs — Pelajari cara menggunakan Cloud Firestore dalam aplikasi yang sesungguhnya dengan mengikuti codelab untuk Android, iOS, atau Web.
    • Model data — Pelajari lebih lanjut pembuatan struktur data di Cloud Firestore, termasuk data hierarkis dan subkoleksi.
    • Menambahkan data — Pelajari lebih lanjut cara membuat dan memperbarui data di Cloud Firestore.
    • Mendapatkan data — Pelajari cara mengambil data lebih lanjut.
    • Menjalankan kueri sederhana dan gabungan — Pelajari cara menjalankan kueri sederhana dan gabungan.
    • Mengurutkan dan membatasi kueri Pelajari cara mengurutkan dan membatasi data yang dihasilkan oleh kueri.