Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Bắt đầu với Cloud Firestore

Phần khởi động nhanh này chỉ cho bạn cách thiết lập Cloud Firestore, thêm dữ liệu, sau đó xem dữ liệu bạn vừa thêm vào bảng điều khiển Firebase.

Tạo cơ sở dữ liệu Cloud Firestore

  1. Nếu bạn chưa có, tạo một dự án căn cứ hỏa lực: Trong căn cứ hỏa lực console , bấm Add dự án, sau đó làm theo các hướng dẫn trên màn hình để tạo một dự án căn cứ hỏa lực hoặc thêm các dịch vụ căn cứ hỏa lực để một dự án GCP hiện có.

  2. Điều hướng đến phần đám mây FireStore của căn cứ hỏa lực console . Bạn sẽ được nhắc chọn một dự án Firebase hiện có. Thực hiện theo quy trình tạo cơ sở dữ liệu.

  3. Chọn chế độ bắt đầu cho Quy tắc bảo mật Cloud Firestore của bạn:

    Chê độ kiểm tra

    Tốt để bắt đầu với thư viện ứng dụng khách di động và web, nhưng cho phép bất kỳ ai đọc và ghi đè dữ liệu của bạn. Sau khi thử nghiệm, hãy chắc chắn để xem xét bảo mật dữ liệu của bạn phần.

    Để bắt đầu với web, iOS hoặc Android SDK, hãy chọn chế độ thử nghiệm.

    Chế độ bị khóa

    Phụ thuộc tất cả các lần đọc và ghi từ các ứng dụng di động và web. Các máy chủ ứng dụng đã xác thực của bạn (C #, Go, Java, Node.js, PHP, Python hoặc Ruby) vẫn có thể truy cập cơ sở dữ liệu của bạn.

    Để bắt đầu với thư viện máy khách máy chủ C #, Go, Java, Node.js, PHP, Python hoặc Ruby, hãy chọn chế độ bị khóa.

  4. Chọn một vị trí cho cơ sở dữ liệu của bạn.

    • Thiết lập vị trí này là dự án của bạn vị trí tài nguyên Google Cloud Platform (GCP) mặc định . Lưu ý rằng vị trí này sẽ được sử dụng cho các dịch vụ GCP trong dự án của bạn đòi hỏi phải có một thiết lập vị trí, đặc biệt là mặc định của bạn Cloud Storage xô và bạn App Engine ứng dụng (đó là cần thiết nếu bạn sử dụng đám mây Scheduler).

    • Nếu bạn không thể chọn một vị trí, thì dự án của bạn đã có một vị trí tài nguyên GCP mặc định. Nó được thiết lập trong quá trình tạo dự án hoặc khi thiết lập một dịch vụ khác yêu cầu thiết lập vị trí.

  5. Nhấn Done.

Khi bạn kích hoạt Mây FireStore, nó cũng cho phép các API trong API quản lý đám mây .

Thiết lập môi trường phát triển của bạn

Thêm các phụ thuộc bắt buộc và thư viện ứng dụng khách vào ứng dụng của bạn.

Phiên bản web 8

  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực để ứng dụng web của bạn .
  2. Thêm các thư viện căn cứ hỏa lực và Cloud FireStore để ứng dụng của bạn:
    <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-firestore.js"></script>
    Cloud FireStore SDK cũng có sẵn như là một gói phần mềm NPM.
    npm install firebase@8.10.0 --save
    
    Bạn sẽ cần phải tự đòi hỏi cả hai căn cứ hỏa lực và Cloud FireStore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

Phiên bản web 9

  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực để ứng dụng web của bạn .
  2. Cloud Firestore SDK có sẵn dưới dạng gói npm.
    npm install firebase@9.1.3 --save
    
    Bạn sẽ cần phải nhập khẩu cả hai căn cứ hỏa lực và Cloud FireStore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS
  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực để ứng dụng iOS của bạn .
  2. Thêm pod Mây FireStore để bạn Podfile
    pod 'Firebase/Firestore'
    
    # Optionally, include the Swift extensions if you're using Swift.
    pod 'FirebaseFirestoreSwift'
    
  3. Lưu tập tin và chạy pod install .

Java

  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực để ứng dụng Android của bạn .
  2. Sử dụng các căn cứ hỏa lực Android HĐQT , kê khai phụ thuộc cho các thư viện đám mây FireStore Android trong module của bạn (ứng dụng cấp) tập tin Gradle (thường là app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // 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'
    }
    

    Bằng việc sử dụng căn cứ hỏa lực Android HĐQT , ứng dụng của bạn sẽ luôn luôn sử dụng các phiên bản tương thích của các thư viện căn cứ hỏa lực Android.

    (Alternative) Khai báo căn cứ hỏa lực phụ thuộc thư viện mà không sử dụng HĐQT

    Nếu bạn chọn không sử dụng Firebase BoM, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phụ thuộc của nó.

    Lưu ý rằng nếu bạn sử dụng nhiều thư viện căn cứ hỏa lực trong ứng dụng của bạn, chúng tôi khuyên bạn nên sử dụng HĐQT để quản lý các phiên bản thư viện, đảm bảo rằng tất cả các phiên bản tương thích.

    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:23.0.4'
    }
    

Kotlin + KTX

  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực để ứng dụng Android của bạn .
  2. Sử dụng các căn cứ hỏa lực Android HĐQT , kê khai phụ thuộc cho các thư viện đám mây FireStore Android trong module của bạn (ứng dụng cấp) tập tin Gradle (thường là app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // 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'
    }
    

    Bằng việc sử dụng căn cứ hỏa lực Android HĐQT , ứng dụng của bạn sẽ luôn luôn sử dụng các phiên bản tương thích của các thư viện căn cứ hỏa lực Android.

    (Alternative) Khai báo căn cứ hỏa lực phụ thuộc thư viện mà không sử dụng HĐQT

    Nếu bạn chọn không sử dụng Firebase BoM, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phụ thuộc của nó.

    Lưu ý rằng nếu bạn sử dụng nhiều thư viện căn cứ hỏa lực trong ứng dụng của bạn, chúng tôi khuyên bạn nên sử dụng HĐQT để quản lý các phiên bản thư viện, đảm bảo rằng tất cả các phiên bản tương thích.

    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:23.0.4'
    }
    
Java
  1. Thêm SDK quản trị Firebase vào ứng dụng của bạn:
    • Sử dụng Gradle:
      compile 'com.google.firebase:firebase-admin:8.1.0'
      
    • Sử dụng Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>8.1.0</version>
      </dependency>
           
  2. Làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore với thông tin đăng nhập phù hợp trong môi trường của bạn.
Python
  1. Thêm căn cứ hỏa lực SDK quản trị để ứng dụng Python của bạn:
    pip install --upgrade firebase-admin
  2. Làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore với thông tin đăng nhập phù hợp trong môi trường của bạn.
C ++
  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực để ++ Dự án C của bạn .
  2. Giao diện C ++ cho Android.
    • Gradle phụ thuộc. Thêm những điều sau đây để mô-đun của bạn (ứng dụng cấp) tập tin Gradle (thường là 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
              }
              
    • Phụ thuộc nhị phân. Tương tự như vậy, cách đề nghị để có được sự phụ thuộc nhị phân là thêm những điều sau đây để bạn CMakeLists.txt file:
              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. Để thiết lập tích hợp máy tính để bàn, xem Thêm căn cứ hỏa lực để dự án của bạn C ++ .
Đoàn kết
  1. Thực hiện theo các hướng dẫn để thêm căn cứ hỏa lực cho dự án Unity của bạn .
  2. Giao diện Unity cho Android.
  3. Khi xây dựng cho Android, hãy bật ProGuarding để tránh giới hạn DEX của Android. Để làm như vậy, trong trình chỉnh sửa Unity:

    1. Chọn Tệp> Cài đặt Bản dựng
    2. Chuyển 'Nền tảng' sang 'Android' và nhấp vào 'Chuyển nền tảng'
    3. Nhấp vào 'Cài đặt trình phát…'
    4. Trong giao diện người dùng Unity chính, trong 'Cài đặt cho Android', chọn 'Cài đặt xuất bản'
    5. Trong phần 'Thu nhỏ', thay đổi cả cài đặt Phát hành và Gỡ lỗi từ 'Không có' thành 'ProGuard'
Node.js
  1. Thêm căn cứ hỏa lực SDK quản trị để ứng dụng của bạn:
    npm install firebase-admin --save
  2. Làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore với thông tin đăng nhập phù hợp trong môi trường của bạn.
Đi
  1. Thêm căn cứ hỏa lực SDK quản trị để ứng dụng Go của bạn:
    go get firebase.google.com/go
    
  2. Làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore với thông tin đăng nhập phù hợp trong môi trường của bạn.
PHP
  1. Cloud FireStore thư viện máy chủ của khách hàng (Java, Node.js, Python, Go, PHP, C #, và Ruby) sử dụng Google Application Mặc định Credentials để xác thực.
    • Để xác thực từ môi trường phát triển của bạn, đặt GOOGLE_APPLICATION_CREDENTIALS biến môi trường để trỏ đến một dịch vụ JSON tập tin then chốt tài khoản. Bạn có thể tạo một tập tin quan trọng trên API trang Credentials điều khiển .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Trong môi trường sản xuất của mình, bạn không cần xác thực nếu bạn chạy ứng dụng của mình trên App Engine hoặc Compute Engine, sử dụng cùng một dự án mà bạn sử dụng cho Cloud Firestore. Nếu không, thiết lập một tài khoản dịch vụ .
  2. Cài đặt và kích hoạt phần mở rộng gRPC cho PHP, mà bạn sẽ cần phải sử dụng thư viện khách hàng.
  3. Thêm thư viện đám mây FireStore PHP để ứng dụng của bạn:
    composer require google/cloud-firestore
NS#
  1. Cloud FireStore thư viện máy chủ của khách hàng (Java, Node.js, Python, Go, PHP, C #, và Ruby) sử dụng Google Application Mặc định Credentials để xác thực.
    • Để xác thực từ môi trường phát triển của bạn, đặt GOOGLE_APPLICATION_CREDENTIALS biến môi trường để trỏ đến một dịch vụ JSON tập tin then chốt tài khoản. Bạn có thể tạo một tập tin quan trọng trên API trang Credentials điều khiển .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Trong môi trường sản xuất của mình, bạn không cần xác thực nếu bạn chạy ứng dụng của mình trên App Engine hoặc Compute Engine, sử dụng cùng một dự án mà bạn sử dụng cho Cloud Firestore. Nếu không, thiết lập một tài khoản dịch vụ .
  2. Thêm thư viện đám mây FireStore C # để ứng dụng của bạn trong .csproj file:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Thêm những điều sau đây để bạn Program.cs file:
    using Google.Cloud.Firestore;
Ruby
  1. Cloud FireStore thư viện máy chủ của khách hàng (Java, Node.js, Python, Go, PHP, C #, và Ruby) sử dụng Google Application Mặc định Credentials để xác thực.
    • Để xác thực từ môi trường phát triển của bạn, đặt GOOGLE_APPLICATION_CREDENTIALS biến môi trường để trỏ đến một dịch vụ JSON tập tin then chốt tài khoản. Bạn có thể tạo một tập tin quan trọng trên API trang Credentials điều khiển .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Trong môi trường sản xuất của mình, bạn không cần xác thực nếu bạn chạy ứng dụng của mình trên App Engine hoặc Compute Engine, sử dụng cùng một dự án mà bạn sử dụng cho Cloud Firestore. Nếu không, thiết lập một tài khoản dịch vụ .
  2. Thêm thư viện đám mây FireStore Ruby để ứng dụng của bạn trong Gemfile :
    gem "google-cloud-firestore"
  3. Cài đặt phụ thuộc từ bạn Gemfile sử dụng:
    bundle install

(Tùy chọn) Nguyên mẫu và thử nghiệm với Firebase Local Emulator Suite

Đối với các nhà phát triển thiết bị di động, trước khi nói về cách ứng dụng của bạn ghi và đọc từ Cloud Firestore, hãy giới thiệu một bộ công cụ bạn có thể sử dụng để tạo mẫu và thử nghiệm chức năng Cloud Firestore: Firebase Local Emulator Suite. Nếu bạn đang thử các mô hình dữ liệu khác nhau, tối ưu hóa các quy tắc bảo mật của mình hoặc làm việc để tìm ra cách hiệu quả nhất về chi phí để tương tác với back-end, có thể làm việc cục bộ mà không cần triển khai các dịch vụ trực tiếp có thể là một ý tưởng tuyệt vời.

Trình giả lập Cloud Firestore là một phần của Bộ phần mềm giả lập cục bộ, cho phép ứng dụng của bạn tương tác với cấu hình và nội dung cơ sở dữ liệu được mô phỏng, cũng như tùy chọn các tài nguyên dự án được mô phỏng của bạn (chức năng, cơ sở dữ liệu khác và quy tắc bảo mật).

Sử dụng trình giả lập Cloud Firestore chỉ bao gồm một vài bước:

  1. Thêm một dòng mã vào cấu hình thử nghiệm của ứng dụng để kết nối với trình mô phỏng.
  2. Từ thư mục gốc của thư mục dự án địa phương của bạn, chạy firebase emulators:start .
  3. Thực hiện cuộc gọi từ mã nguyên mẫu của ứng dụng bằng SDK nền tảng Cloud Firestore như thường lệ.

Một chi tiết hương liên quan đến đám mây FireStore và Cloud Chức năng có sẵn. Bạn cũng nên có một cái nhìn tại giới thiệu địa phương Emulator Suite .

Khởi tạo Cloud Firestore

Khởi tạo một phiên bản của Cloud Firestore:

Phiên bản web 9

// 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();
Các giá trị cho `initializeApp` thể được tìm thấy trong ứng dụng web của bạn 'firebaseConfig` . Để tồn tại dữ liệu khi thiết bị mất kết nối của nó, xem Enable offline dữ liệu tài liệu.

Phiên bản web 8

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

var db = firebase.firestore();
Các giá trị cho `initializeApp` thể được tìm thấy trong ứng dụng web của bạn 'firebaseConfig` . Để tồn tại dữ liệu khi thiết bị mất kết nối của nó, xem Enable offline dữ liệu tài liệu.
Nhanh
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
Cloud Firestore SDK được khởi tạo theo nhiều cách khác nhau tùy thuộc vào môi trường của bạn. Dưới đây là các phương pháp phổ biến nhất. Đối với một tài liệu tham khảo đầy đủ, thấy Initialize SDK quản trị .
  • Khởi tạo trên 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();
    
  • Khởi tạo trên máy chủ của riêng bạn

    Để sử dụng các căn cứ hỏa lực SDK quản trị trên máy chủ của riêng bạn, sử dụng một tài khoản dịch vụ .

    Đến IAM & quản trị> Dịch vụ chiếm trong nền tảng đám mây Console. Tạo khóa riêng tư mới và lưu tệp JSON. Sau đó, sử dụng tệp để khởi tạo 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
    Cloud Firestore SDK được khởi tạo theo nhiều cách khác nhau tùy thuộc vào môi trường của bạn. Dưới đây là các phương pháp phổ biến nhất. Đối với một tài liệu tham khảo đầy đủ, thấy Initialize SDK quản trị .
  • Khởi tạo trên 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()
    
  • Khởi tạo trên máy chủ của riêng bạn

    Để sử dụng các căn cứ hỏa lực SDK quản trị trên máy chủ của riêng bạn, sử dụng một tài khoản dịch vụ .

    Đến IAM & quản trị> Dịch vụ chiếm trong nền tảng đám mây Console. Tạo khóa riêng tư mới và lưu tệp JSON. Sau đó, sử dụng tệp để khởi tạo 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()
    
  • Python

    Cloud Firestore SDK được khởi tạo theo nhiều cách khác nhau tùy thuộc vào môi trường của bạn. Dưới đây là các phương pháp phổ biến nhất. Đối với một tài liệu tham khảo đầy đủ, thấy Initialize SDK quản trị .
  • Khởi tạo trên 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.AsyncClient()
    
  • Khởi tạo trên máy chủ của riêng bạn

    Để sử dụng các căn cứ hỏa lực SDK quản trị trên máy chủ của riêng bạn, sử dụng một tài khoản dịch vụ .

    Đến IAM & quản trị> Dịch vụ chiếm trong nền tảng đám mây Console. Tạo khóa riêng tư mới và lưu tệp JSON. Sau đó, sử dụng tệp để khởi tạo 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.AsyncClient()
    
  • C ++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
    App::Create();
    Firestore* db = Firestore::GetInstance();
    Node.js
    Cloud Firestore SDK được khởi tạo theo nhiều cách khác nhau tùy thuộc vào môi trường của bạn. Dưới đây là các phương pháp phổ biến nhất. Đối với một tài liệu tham khảo đầy đủ, thấy Initialize SDK quản trị .
    • Khởi tạo trên đám mây Chức năng
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Khởi tạo trên Google Cloud Platform
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      initializeApp({
        credential: applicationDefault()
      });
      
      const db = getFirestore();
    • Khởi tạo trên máy chủ của riêng bạn

      Để sử dụng các căn cứ hỏa lực SDK quản trị trên máy chủ của riêng bạn (hoặc bất kỳ môi trường Node.js khác), sử dụng một tài khoản dịch vụ . Đến IAM & quản trị> Dịch vụ chiếm trong nền tảng đám mây Console. Tạo khóa riêng tư mới và lưu tệp JSON. Sau đó, sử dụng tệp để khởi tạo SDK:

      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      initializeApp({
        credential: cert(serviceAccount)
      });
      
      const db = getFirestore();
      
    Đi
    Cloud Firestore SDK được khởi tạo theo nhiều cách khác nhau tùy thuộc vào môi trường của bạn. Dưới đây là các phương pháp phổ biến nhất. Đối với một tài liệu tham khảo đầy đủ, thấy Initialize SDK quản trị .
  • Khởi tạo trên 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()
    
  • Khởi tạo trên máy chủ của riêng bạn

    Để sử dụng các căn cứ hỏa lực SDK quản trị trên máy chủ của riêng bạn, sử dụng một tài khoản dịch vụ .

    Đến IAM & quản trị> Dịch vụ chiếm trong nền tảng đám mây Console. Tạo khóa riêng tư mới và lưu tệp JSON. Sau đó, sử dụng tệp để khởi tạo 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.
     */
    function setup_client_create()
    {
        // Create the Cloud Firestore client
        $db = new FirestoreClient();
        printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
    }
    Đoàn kết
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    NS#
    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Ruby
    require "google/cloud/firestore"
    
    # The `project_id` parameter is optional and represents which project the
    # client will act on behalf of. If not supplied, the client falls back to the
    # default project inferred from the environment.
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

    Thêm dữ liệu

    Cloud Firestore lưu trữ dữ liệu trong Tài liệu, được lưu trữ trong Bộ sưu tập. Cloud Firestore tạo bộ sưu tập và tài liệu một cách ngầm định vào lần đầu tiên bạn thêm dữ liệu vào tài liệu. Bạn không cần phải tạo bộ sưu tập hoặc tài liệu một cách rõ ràng.

    Tạo một bộ sưu tập mới và một tài liệu bằng cách sử dụng mã ví dụ sau.

    Phiên bản web 9

    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);
    }

    Phiên bản web 8

    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);
    });
    Nhanh
    // 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
    })

    Python

    doc_ref = db.collection("users").document("alovelace")
    await doc_ref.set({"first": "Ada", "last": "Lovelace", "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()
                  << std::endl;
      } else {
        std::cout << "Error adding document: " << future.error_message() << std::endl;
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Đi
    _, _, 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('samples/php/users')->document('lovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    Đoàn kết
    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.");
    });
    NS#
    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."

    Bây giờ thêm tài liệu khác cho users bộ sưu tập. Lưu ý rằng tài liệu này bao gồm một cặp khóa-giá trị (tên đệm) không xuất hiện trong tài liệu đầu tiên. Các tài liệu trong một bộ sưu tập có thể chứa các bộ thông tin khác nhau.

    Phiên bản web 9

    // 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);
    }

    Phiên bản web 8

    // 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);
    });
    Nhanh
    // 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
    })

    Python

    doc_ref = db.collection("users").document("aturing")
    await doc_ref.set(
        {"first": "Alan", "middle": "Mathison", "last": "Turing", "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() << std::endl;
          } else {
            std::cout << "Error adding document: " << future.error_message()
                      << std::endl;
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Đi
    _, _, 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('samples/php/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);
    Đoàn kết
    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.");
    });
    NS#
    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."

    Đọc dữ liệu

    Để nhanh chóng xác minh rằng bạn đã thêm dữ liệu với Cloud FireStore, sử dụng người xem dữ liệu trong căn cứ hỏa lực console .

    Bạn cũng có thể sử dụng phương thức "get" để truy xuất toàn bộ bộ sưu tập.

    Phiên bản web 9

    import { collection, getDocs } from "firebase/firestore"; 
    
    const querySnapshot = await getDocs(collection(db, "users"));
    querySnapshot.forEach((doc) => {
      console.log(`${doc.id} => ${doc.data()}`);
    });

    Phiên bản web 8

    db.collection("users").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
        });
    });
    Nhanh
    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()}')

    Python

    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    async 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 << std::endl;
        }
      } else {
        std::cout << "Error getting documents: " << future.error_message()
                  << std::endl;
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Đi
    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('samples/php/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);
    Đoàn kết
    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.");
    });
    NS#
    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

    Bảo mật dữ liệu của bạn

    Nếu bạn đang sử dụng Web, Android, hay iOS SDK, sử dụng căn cứ hỏa lực xác thựcSecurity Rules FireStore đám mây để đảm bảo dữ liệu của bạn trong Cloud FireStore.

    Dưới đây là một số bộ quy tắc cơ bản mà bạn có thể sử dụng để bắt đầu. Bạn có thể sửa đổi quy tắc bảo mật của bạn trong tab Rules của giao diện điều khiển.

    Yêu cầu xác thực

    // 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;
        }
      }
    }
    

    Chế độ bị khóa

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

    Chê độ kiểm tra

    // 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;
        }
      }
    }
    

    Nếu bạn đang sử dụng một trong những SDK máy chủ, sử dụng nhận dạng và quản lý truy cập (IAM) để đảm bảo dữ liệu của bạn trong Cloud FireStore.

    Xem video hướng dẫn

    Để được hướng dẫn chi tiết về cách bắt đầu với thư viện ứng dụng khách di động Cloud Firestore, hãy xem một trong các video hướng dẫn sau:

    Web
    iOS
    Android

    Bạn có thể tìm thấy nhiều video trong các căn cứ hỏa lực kênh YouTube .

    Bước tiếp theo

    Đào sâu kiến ​​thức của bạn với các chủ đề sau: