转到控制台

Cloud Firestore 使用入门

此快速入门将向您展示如何设置 Cloud Firestore、添加数据以及在 Firebase 控制台中查看您刚刚添加的数据。

创建 Cloud Firestore 数据库

  1. 如果您还没有 Firebase 项目,请创建一个:在 Firebase 控制台中,点击添加项目,然后按照屏幕上的说明创建 Firebase 项目或将 Firebase 服务添加到现有 GCP 项目。

  2. 从控制台的导航窗格中,选择 Database(数据库),然后针对 Cloud Firestore 点击创建数据库

  3. 为您的 Cloud Firestore 安全规则选择一个开始模式:

    测试模式

    如需开始使用移动和 Web 客户端库,适合使用此模式。不过此模式允许任何人读取和覆盖您的数据。测试后,请务必查看保护您的数据部分。

    如需开始使用 Web、iOS 或 Android SDK,请选择测试模式。

    锁定模式

    拒绝来自移动和 Web 客户端的所有读写操作。经过身份验证的应用服务器(C#、Go、Java、Node.js、PHP、Python 或 Ruby)仍然可以访问您的数据库。

    如需开始使用 C#、Go、Java、Node.js、PHP、Python 或 Ruby 服务器客户端库,请选择锁定模式。

  4. 选择数据库的位置

    • 此位置设置是您项目的默认 Google Cloud Platform (GCP) 资源位置。请注意:此位置将用于项目中需要位置设置的 GCP 服务,具体指您的默认 Cloud Storage 存储分区和 App Engine 应用(如果您使用 Cloud Scheduler,就需要该应用)。

    • 如果您无法选择位置,则表示您的项目已具有默认 GCP 资源位置。它可能是在项目创建期间设置的,也可能是在设置需要位置设置的其他服务时设置的。

  5. 点击完成

如果启用 Cloud Firestore,也就在 Cloud API 管理器中启用了相应 API。

设置开发环境

将所需的依赖项和客户端库添加到您的应用。

Web
  1. 按照相关说明将 Firebase 添加到您的 Web 应用
  2. 将 Firebase 库和 Cloud Firestore 库添加到您的应用中:
    <script src="https://www.gstatic.com/firebasejs/6.2.4/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/6.2.4/firebase-firestore.js"></script>
    Cloud Firestore SDK 也可以作为 npm 软件包提供。
    npm install firebase@6.2.4 --save
    
    您需要手动通过 require() 函数同时引入 Firebase 和 Cloud Firestore。
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    
iOS
  1. 按照相关说明将 Firebase 添加到您的 iOS 应用
  2. 将 Cloud Firestore pod 添加到您的 Podfile
    pod 'Firebase/Core'
    pod 'Firebase/Firestore'
  3. 保存该文件并运行 pod install
Java
  1. 按照相关说明将 Firebase 添加到您的 Android 应用
  2. 请务必在您的项目级 build.gradle 文件的 buildscriptallprojects 部分添加 Google 的 Maven 代码库。
  3. 将 Cloud Firestore Android 库添加到您的 app/build.gradle 文件中:
    implementation 'com.google.firebase:firebase-firestore:20.1.0'
Kotlin
  1. 按照相关说明将 Firebase 添加到您的 Android 应用
  2. 请务必在您的项目级 build.gradle 文件的 buildscriptallprojects 部分添加 Google 的 Maven 代码库。
  3. 将 Cloud Firestore Android 库添加到您的 app/build.gradle 文件中:
    implementation 'com.google.firebase:firebase-firestore:20.1.0'
Java
  1. 将 Firebase Admin SDK 添加到您的应用中:
    • 使用 Gradle:
      compile 'com.google.firebase:firebase-admin:6.8.1'
      
    • 使用 Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>6.8.1</version>
      </dependency>
           
  2. 按照以下说明在您的环境中使用适当的凭据初始化 Cloud Firestore。
Python
  1. 将 Firebase Admin SDK 添加到您的 Python 应用中:
    pip install --upgrade firebase-admin
  2. 按照以下说明在您的环境中使用适当的凭据初始化 Cloud Firestore。
Node.js
  1. 将 Firebase Admin SDK 添加到您的应用中:
    npm install firebase-admin --save
  2. 按照以下说明在您的环境中使用适当的凭据初始化 Cloud Firestore。
Go
  1. 将 Firebase Admin SDK 添加到您的 Go 应用中:
    go get firebase.google.com/go
    
  2. 按照以下说明在您的环境中使用适当的凭据初始化 Cloud Firestore。
PHP
  1. Cloud Firestore 服务器客户端库(Java、Node.js、Python、Go、PHP、C# 和 Ruby)使用 Google 应用默认凭据进行身份验证。
    • 如需从开发环境中进行身份验证,请将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为指向 JSON 服务帐号密钥文件。您可以在 API 控制台的“凭据”页面上创建一个密钥文件。
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • 在生产环境中,如果您使用 Cloud Firestore 所用的那个项目在 App Engine 或 Compute Engine 上运行应用,则无需进行身份验证。否则,请设置服务帐号
  2. 为 PHP 安装并启用 gRPC 扩展程序(您在使用客户端库时会用到它)。
  3. 将 Cloud Firestore PHP 库添加到您的应用中:
    composer require google/cloud-firestore
C#
  1. Cloud Firestore 服务器客户端库(Java、Node.js、Python、Go、PHP、C# 和 Ruby)使用 Google 应用默认凭据进行身份验证。
    • 如需从开发环境中进行身份验证,请将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为指向 JSON 服务帐号密钥文件。您可以在 API 控制台的“凭据”页面上创建一个密钥文件。
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • 在生产环境中,如果您使用 Cloud Firestore 所用的那个项目在 App Engine 或 Compute Engine 上运行应用,则无需进行身份验证。否则,请设置服务帐号
  2. 在您的 .csproj 文件中,将 Cloud Firestore C# 库添加到您的应用中:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.0.0-beta19" />
    </ItemGroup>
  3. 将以下代码添加到您的 Program.cs 文件中:
    using Google.Cloud.Firestore;
Ruby
  1. Cloud Firestore 服务器客户端库(Java、Node.js、Python、Go、PHP、C# 和 Ruby)使用 Google 应用默认凭据进行身份验证。
    • 如需从开发环境中进行身份验证,请将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为指向 JSON 服务帐号密钥文件。您可以在 API 控制台的“凭据”页面上创建一个密钥文件。
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • 在生产环境中,如果您使用 Cloud Firestore 所用的那个项目在 App Engine 或 Compute Engine 上运行应用,则无需进行身份验证。否则,请设置服务帐号
  2. 在您的 Gemfile 中,将 Cloud Firestore Ruby 库添加到您的应用中:
    gem "google-cloud-firestore"
  3. 使用以下代码,从您的 Gemfile 中安装依赖项:
    bundle install

初始化 Cloud Firestore

初始化 Cloud Firestore 的实例:

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

var db = firebase.firestore();
要在设备失去网络连接时保留数据,请参阅启用离线数据这篇文档。
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
// Access a Cloud Firestore instance from your Activity
val db = FirebaseFirestore.getInstance()
Java
Cloud Firestore SDK 可通过各种不同的方式进行初始化,具体取决于您的环境。以下是最常用的一些方法。如需完整的参考,请参阅初始化 Admin SDK
  • 在 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();
    
  • 在您自己的服务器上初始化

    要在您自己的服务器上使用 Firebase Admin SDK,请使用一个服务帐号

    在 Cloud Platform Console 中,转到 IAM 和管理 > 服务帐号。生成一个新的私钥并保存该 JSON 文件。然后使用该文件来初始化 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 可通过各种不同的方式进行初始化,具体取决于您的环境。以下是最常用的一些方法。如需完整的参考,请参阅初始化 Admin SDK
  • 在 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()
    
  • 在您自己的服务器上初始化

    要在您自己的服务器上使用 Firebase Admin SDK,请使用一个服务帐号

    在 Cloud Platform Console 中,转到 IAM 和管理 > 服务帐号。生成一个新的私钥并保存该 JSON 文件。然后使用该文件来初始化 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()
    
  • Node.js
    Cloud Firestore SDK 可通过各种不同的方式进行初始化,具体取决于您的环境。以下是最常用的一些方法。如需完整的参考,请参阅初始化 Admin SDK
    • 在 Cloud Functions 上初始化
      const admin = require('firebase-admin');const functions = require('firebase-functions');
      
      admin.initializeApp(functions.config().firebase);
      
      let db = admin.firestore();
      
      
    • 在 Google Cloud Platform 上初始化
      const admin = require('firebase-admin');
      admin.initializeApp({
        credential: admin.credential.applicationDefault()
      });
      
      const db = admin.firestore();
      // ...
      
      
    • 在您自己的服务器上初始化

      要在您自己的服务器上(或其他任何 Node.js 环境中)使用 Firebase Admin SDK,请使用一个服务帐号。在 Cloud Platform Console 中,转到 IAM 和管理 > 服务帐号。生成一个新的私钥并保存该 JSON 文件。然后使用该文件来初始化 SDK:

      const admin = require('firebase-admin');
      let serviceAccount = require('path/to/serviceAccountKey.json');
      
      admin.initializeApp({
        credential: admin.credential.cert(serviceAccount)
      });
      
      let db = admin.firestore();
      
      
    Go
    Cloud Firestore SDK 可通过各种不同的方式进行初始化,具体取决于您的环境。以下是最常用的一些方法。如需完整的参考,请参阅初始化 Admin SDK
  • 在 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()
    
  • 在您自己的服务器上初始化

    要在您自己的服务器上使用 Firebase Admin SDK,请使用一个服务帐号

    在 Cloud Platform Console 中,转到 IAM 和管理 > 服务帐号。生成一个新的私钥并保存该 JSON 文件。然后使用该文件来初始化 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);
    }
    
    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."
    

    添加数据

    Cloud Firestore 将数据存储在文档中,而文档存储在集合中。在您首次向文档添加数据时,Cloud Firestore 就会隐式创建集合和文档。您不需要显式创建集合或文档。

    使用以下示例代码创建一个新集合和一个新文档。

    Web
    db.collection("users").add({
        first: "Ada",
        last: "Lovelace",
        born: 1815
    })
    .then(function(docRef) {
        console.log("Document written with ID: ", docRef.id);
    })
    .catch(function(error) {
        console.error("Error adding document: ", error);
    });
    
    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
    // 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
    })
      
    Node.js
    let docRef = db.collection('users').doc('alovelace');
    
    let setAda = 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);
      
    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 "users/alovelace"
    
    doc_ref.set(
      first: "Ada",
      last:  "Lovelace",
      born:  1815
    )
    
    puts "Added data to the alovelace document in the users collection."
      

    现在将另一个文档添加到 users 集合。请注意,此文档包含第一个文档中没有的一个键值对(中间名)。集合中的文档可以包含不同的信息集。

    Web
    // Add a second document with a generated ID.
    db.collection("users").add({
        first: "Alan",
        middle: "Mathison",
        last: "Turing",
        born: 1912
    })
    .then(function(docRef) {
        console.log("Document written with ID: ", docRef.id);
    })
    .catch(function(error) {
        console.error("Error adding document: ", error);
    });
    
    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
    // 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
    })
      
    Node.js
    let aTuringRef = db.collection('users').doc('aturing');
    
    let setAlan = 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);
      
    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 "users/aturing"
    
    doc_ref.set(
      first:  "Alan",
      middle: "Mathison",
      last:   "Turing",
      born:   1912
    )
    
    puts "Added data to the aturing document in the users collection."
      

    读取数据

    要快速验证是否已将数据添加到 Cloud Firestore,请使用 Firebase 控制台中的数据查看器。

    您也可以使用“get”方法来检索整个集合。

    Web
    db.collection("users").get().then((querySnapshot) => {
        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
    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.get()
    
    for doc in docs:
        print(u'{} => {}'.format(doc.id, doc.to_dict()))
      
    Node.js
    db.collection('users').get()
      .then((snapshot) => {
        snapshot.forEach((doc) => {
          console.log(doc.id, '=>', doc.data());
        });
      })
      .catch((err) => {
        console.log('Error getting documents', err);
      });
      
    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);
      
    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 "users"
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end
      

    保护您的数据

    如果您使用的是 Web、Android 或 iOS SDK,请使用 Firebase 身份验证Cloud Firestore 安全规则保护 Cloud Firestore 中的数据。

    下面是一些可助您入门的基本规则集。您可以在控制台的“规则”标签中修改安全规则。

    需要身份验证

    // 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.uid != null;
        }
      }
    }
    

    锁定模式

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

    测试模式

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

    如果您使用的是服务器 SDK 中的一种,请利用 Identity and Access Management (IAM) 来保护 Cloud Firestore 中的数据。

    观看视频教程

    如需帮助您开始使用 Cloud Firestore 移动和 Web 客户端库的详细指南,请观看以下视频教程之一:

    Web
    iOS
    Android

    您可以在 Firebase YouTube 频道中找到更多视频。

    后续步骤

    通过以下各主题深入了解相关知识: