Catch up on everything we announced at this year's Firebase Summit. Learn more

Начать работу с Cloud Firestore

В этом кратком руководстве показано, как настроить Cloud Firestore, добавить данные, а затем просмотреть только что добавленные данные в консоли Firebase.

Создайте базу данных Cloud Firestore

  1. Если вы еще не сделали, создать проект Firebase: В Firebase консоли , нажмите кнопку Добавить проект, а затем следуйте инструкциям на экране , чтобы создать проект Firebase или добавить услуги Firebase к существующему проекту GCP.

  2. Перейдите в раздел Cloud Firestore на консоли Firebase . Вам будет предложено выбрать существующий проект Firebase. Следуйте рабочему процессу создания базы данных.

  3. Выберите начальный режим для своих правил безопасности Cloud Firestore:

    Тестовый режим

    Подходит для начала работы с мобильными и веб-клиентскими библиотеками, но позволяет любому читать и перезаписывать ваши данные. После тестирования, убедитесь , что для рассмотрения защиты данных в разделе.

    Чтобы начать работу с Интернетом, платформами Apple или Android SDK, выберите тестовый режим.

    Заблокированный режим

    Запрещает все операции чтения и записи из мобильных и веб-клиентов. Ваши аутентифицированные серверы приложений (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 приложения (которое требуется при использовании Виртуального планировщика).

    • Если вы не можете выбрать местоположение, значит, в вашем проекте уже есть местоположение ресурса GCP по умолчанию. Он был установлен либо во время создания проекта, либо при настройке другой службы, для которой требуется настройка местоположения.

  5. Нажмите Готово.

При включении Cloud Firestore, он также позволяет API в Cloud API диспетчера .

Настройте свою среду разработки

Добавьте в приложение необходимые зависимости и клиентские библиотеки.

Веб-версия 8

  1. Следуйте инструкциям , чтобы добавить Firebase к вашему веб - приложение .
  2. Добавьте библиотеки Firebase и Cloud Firestore ваше приложение:
    <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>
    Облако Firestore SDK также доступен как пакет НПМ.
    npm install firebase@8.10.0 --save
    
    Вам нужно вручную требует как Firebase и Cloud Firestore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

Веб-версия 9

  1. Следуйте инструкциям , чтобы добавить Firebase к вашему веб - приложение .
  2. SDK Cloud Firestore доступен в виде пакета npm.
    npm install firebase@9.4.1 --save
    
    Вам необходимо импортировать как Firebase и Cloud Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS +
  1. Следуйте инструкциям , чтобы добавить Firebase в приложение Apple , .
  2. Добавить стручок Облако Firestore к вашему Podfile
    pod 'Firebase/Firestore'
    
    # Optionally, include the Swift extensions if you're using Swift.
    pod 'FirebaseFirestoreSwift'
    
  3. Сохраните файл и запустите pod install .

Джава

  1. Следуйте инструкции , чтобы добавить Firebase в свой Android приложения .
  2. Использование Firebase Android Банка Москвы , объявить зависимость для библиотеки Cloud Firestore Android в вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.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'
    }
    

    С помощью Firebase Android Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

    (Альтернативный) Объявляет Firebase библиотеки зависимостей без использования спецификации

    Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.

    Обратите внимание , что если вы используете несколько библиотеки Firebase в вашем приложении, мы настоятельно рекомендуем использовать спецификации для управления версиями библиотеки, что гарантирует , что все версии совместимы.

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

Котлин + KTX

  1. Следуйте инструкции , чтобы добавить Firebase в свой Android приложения .
  2. Использование Firebase Android Банка Москвы , объявить зависимость для библиотеки Cloud Firestore Android в вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.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'
    }
    

    С помощью Firebase Android Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

    (Альтернативный) Объявляет Firebase библиотеки зависимостей без использования спецификации

    Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.

    Обратите внимание , что если вы используете несколько библиотеки Firebase в вашем приложении, мы настоятельно рекомендуем использовать спецификации для управления версиями библиотеки, что гарантирует , что все версии совместимы.

    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:24.0.0'
    }
    
Джава
  1. Добавьте в приложение Firebase Admin SDK:
    • Использование Gradle:
      compile 'com.google.firebase:firebase-admin:8.1.0'
      
    • Использование Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>8.1.0</version>
      </dependency>
           
  2. Следуйте приведенным ниже инструкциям, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
Python
  1. Добавьте Firebase Admin SDK для вашего приложения Python:
    pip install --upgrade firebase-admin
  2. Следуйте приведенным ниже инструкциям, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
C ++
  1. Следуйте инструкциям , чтобы добавить Firebase в свой проект C ++ .
  2. Интерфейс C ++ для Android.
    • Зависимости Gradle. Добавьте следующую строку в ваш модуль (приложение уровня) Gradle файл (обычно 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
              }
              
    • Бинарные зависимости. Аналогичным образом , рекомендуемый способ получения бинарных зависимостей заключается в добавлении следующей строки в CMakeLists.txt файл:
              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. Чтобы настроить рабочий стол интеграции см Добавить Firebase в свой проект C ++ .
Единство
  1. Следуйте инструкциям , чтобы добавить Firebase в свой проект Unity .
  2. Интерфейс Unity для Android.
  3. При сборке для Android включите ProGuarding, чтобы избежать ограничения Android DEX. Для этого в редакторе Unity:

    1. Выберите Файл> Параметры сборки.
    2. Переключите «Платформу» на «Android» и нажмите «Сменить платформу».
    3. Нажмите "Настройки проигрывателя…"
    4. В основном пользовательском интерфейсе Unity в разделе «Настройки для Android» выберите «Настройки публикации».
    5. В разделе Minify измените настройки Release и Debug с «Нет» на «ProGuard».
Node.js
  1. Добавьте Firebase Admin SDK в ваше приложение:
    npm install firebase-admin --save
  2. Следуйте приведенным ниже инструкциям, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
Идти
  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"
    • В производственной среде вам не нужно проходить аутентификацию, если вы запускаете приложение в App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore. В противном случае, создать учетную запись службы .
  2. Установить и включить расширение КПГР для PHP, который вам нужно будет использовать клиентскую библиотеку.
  3. Добавить библиотеку Облако 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"
    • В производственной среде вам не нужно проходить аутентификацию, если вы запускаете приложение в App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore. В противном случае, создать учетную запись службы .
  2. Добавить библиотеку Облако Firestore C # для вашего приложения в вашем .csproj файле:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Добавьте следующую строку в ваш Program.cs файл:
    using Google.Cloud.Firestore;
Рубин
  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"
    • В производственной среде вам не нужно проходить аутентификацию, если вы запускаете приложение в App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore. В противном случае, создать учетную запись службы .
  2. Добавить библиотеку Облако Firestore Ruby , чтобы ваше приложение в вашем Gemfile :
    gem "google-cloud-firestore"
  3. Установить зависимости от вашего Gemfile с помощью:
    bundle install

(Необязательно) Прототип и тестирование с помощью Firebase Local Emulator Suite

Для мобильных разработчиков, прежде чем говорить о том, как ваше приложение записывает и читает из Cloud Firestore, давайте представим набор инструментов, которые вы можете использовать для прототипирования и тестирования функциональности Cloud Firestore: Firebase Local Emulator Suite. Если вы пробуете разные модели данных, оптимизируете свои правила безопасности или работаете над поиском наиболее экономичного способа взаимодействия с серверной частью, возможность работать локально без развертывания живых сервисов может быть отличной идеей.

Эмулятор Cloud Firestore является частью Local Emulator Suite, который позволяет вашему приложению взаимодействовать с содержимым и конфигурацией эмулируемой базы данных, а также с дополнительными ресурсами вашего эмулируемого проекта (функциями, другими базами данных и правилами безопасности).

Использование эмулятора Cloud Firestore включает всего несколько шагов:

  1. Добавление строки кода в тестовую конфигурацию вашего приложения для подключения к эмулятору.
  2. Из корня вашей локальной директории проекта, работает firebase emulators:start .
  3. Выполнение вызовов из кода прототипа вашего приложения, как обычно, с помощью SDK платформы Cloud Firestore.

Подробное прохождение игры с участием Облако Firestore и Облако функции доступны. Вы также должны взглянуть на введение Local Emulator сюита .

Инициализировать Cloud Firestore

Инициализируйте экземпляр Cloud Firestore:

Веб-версия 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();
Значения `initializeApp` можно найти в вашем веб - приложения ` firebaseConfig` . Для сохранения данных , когда устройство теряет соединение, см Enable Offline Data документации.

Веб-версия 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();
Значения `initializeApp` можно найти в вашем веб - приложения ` firebaseConfig` . Для сохранения данных , когда устройство теряет соединение, см Enable Offline Data документации.
Быстрый
Примечание: Этот продукт не доступен на watchOS и App целей клипа.
import Firebase
FirebaseApp.configure()

let db = Firestore.firestore()
Цель-C
Примечание: Этот продукт не доступен на watchOS и App целей клипа.
@import Firebase;

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

Джава

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

Котлин + KTX

// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore
Джава
SDK Cloud Firestore инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см Initialize админ 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 на вашем собственном сервере, используйте учетную запись службы .

    Перейти к 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
    SDK Cloud Firestore инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см Initialize админ 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 на вашем собственном сервере, используйте учетную запись службы .

    Перейти к 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()
    
  • Python

    SDK Cloud Firestore инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см Initialize админ 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.AsyncClient()
    
  • Инициализировать на собственном сервере

    Для того, чтобы использовать Firebase Admin SDK на вашем собственном сервере, используйте учетную запись службы .

    Перейти к 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.AsyncClient()
    
  • C ++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
    App::Create();
    Firestore* db = Firestore::GetInstance();
    Node.js
    SDK Cloud Firestore инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см Initialize админ SDK .
    • Инициализировать на облачных функций
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Инициализировать на 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();
    • Инициализировать на собственном сервере

      Для того, чтобы использовать Firebase Admin SDK на вашем собственном сервере (или любую другую среду Node.js), используйте учетную запись службы . Перейти к IAM и администратора> Учетные записи служб в облаке платформы консоли. Создайте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации 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();
      
    Идти
    SDK Cloud Firestore инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см Initialize админ 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 на вашем собственном сервере, используйте учетную запись службы .

    Перейти к 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.
     */
    function setup_client_create(string $projectId = null)
    {
        // Create the Cloud Firestore client
        if (empty($projectId)) {
            // The `projectId` 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.
            $db = new FirestoreClient();
            printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
        } else {
            $db = new FirestoreClient([
                'projectId' => $projectId,
            ]);
            printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);
        }
    }
    Единство
    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);
    Рубин
    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."

    Добавить данные

    Cloud Firestore хранит данные в документах, которые хранятся в коллекциях. Cloud Firestore неявно создает коллекции и документы при первом добавлении данных в документ. Вам не нужно явно создавать коллекции или документы.

    Создайте новую коллекцию и документ, используя следующий пример кода.

    Веб-версия 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);
    }

    Веб-версия 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);
    });
    Быстрый
    Примечание: Этот продукт не доступен на watchOS и App целей клипа.
    // 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)")
        }
    }
    Цель-C
    Примечание: Этот продукт не доступен на watchOS и App целей клипа.
    // 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);
          }
        }];

    Джава

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

    Котлин + 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)
        }
    Джава
    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
    });
    Идти
    _, _, 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);
    Единство
    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);
    Рубин
    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."

    Теперь добавьте еще один документ на users коллекции. Обратите внимание, что этот документ включает пару «ключ-значение» (отчество), которой нет в первом документе. Документы в коллекции могут содержать разные наборы информации.

    Веб-версия 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);
    }

    Веб-версия 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);
    });
    Быстрый
    Примечание: Этот продукт не доступен на watchOS и App целей клипа.
    // 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)")
        }
    }
    Цель-C
    Примечание: Этот продукт не доступен на watchOS и App целей клипа.
    // 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);
          }
        }];

    Джава

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

    Котлин + 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)
        }
    Джава
    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
    });
    Идти
    _, _, 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);
    Единство
    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);
    Рубин
    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."

    Прочитать данные

    Чтобы быстро проверить , что вы добавили данные в облако Firestore, используйте средство просмотра данных в консоли Firebase .

    Вы также можете использовать метод get для получения всей коллекции.

    Веб-версия 9

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

    Веб-версия 8

    db.collection("users").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
        });
    });
    Быстрый
    Примечание: Этот продукт не доступен на watchOS и App целей клипа.
    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())")
            }
        }
    }
    Цель-C
    Примечание: Этот продукт не доступен на watchOS и App целей клипа.
    [[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);
            }
          }
        }];

    Джава

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

    Котлин + 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)
            }
    Джава
    // 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());
    });
    Идти
    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);
    Единство
    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();
    }
    Рубин
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    Защитите свои данные

    Если вы используете Web, Android или Apple , платформы SDK, использовать Firebase аутентификацию и облачные правила безопасности Firestore для обеспечения безопасности данных в облаке 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 != 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;
        }
      }
    }
    

    Перед развертыванием веб-приложения, приложения для Android или iOS в производственной среде также примите меры, чтобы только клиенты вашего приложения могли получить доступ к данным Cloud Firestore. Смотрите Check App документации.

    Если вы используете один из серверов SDKs, использование Управление идентификацией и доступом (IAM) для обеспечения безопасности данных в облаке Firestore.

    Посмотреть видеоурок

    Подробные инструкции по началу работы с мобильными клиентскими библиотеками Cloud Firestore см. В одном из следующих видеоуроков:

    Интернет
    iOS +
    Android

    Вы можете найти больше видео в Firebase канале YouTube .

    Следующие шаги

    Углубите свои знания по следующим темам: