Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

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

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

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

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

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

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

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

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

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

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

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

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

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

Интернет v8

  1. Следуйте инструкциям, чтобы добавить Firebase в свое веб-приложение .
  2. Добавьте в свое приложение библиотеки Firebase и Cloud Firestore:
    <script src="https://www.gstatic.com/firebasejs/8.4.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.4.1/firebase-firestore.js"></script>
    SDK Cloud Firestore также доступен в виде пакета npm.
    npm install firebase@8.4.1 --save
    
    Вам нужно будет вручную потребовать как Firebase, так и Cloud Firestore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

Интернет v9

  1. Следуйте инструкциям, чтобы добавить Firebase в свое веб-приложение .
  2. SDK Cloud Firestore доступен в виде пакета npm.
    npm install firebase@9.0.0-beta.1 --save
    
    Вам нужно будет импортировать Firebase и Cloud Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS
  1. Следуйте инструкциям, чтобы добавить Firebase в свое приложение iOS .
  2. Добавьте модуль Cloud 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 BoM , объявите зависимость для библиотеки Android Cloud Firestore в файле Gradle модуля (уровня приложения) (обычно app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.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 BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.

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

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

    Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

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

Котлин + KTX

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

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

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

    Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

    dependencies {
        // Declare the dependency for the Cloud Firestore library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-firestore-ktx:22.1.2'
    }
    
Ява
  1. Добавьте в приложение Firebase Admin SDK:
    • Использование Gradle:
      compile 'com.google.firebase:firebase-admin:7.1.1'
      
    • Использование Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>7.1.1</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 среды GOOGLE_APPLICATION_CREDENTIALS чтобы она указывала на файл ключа учетной записи службы JSON. Вы можете создать файл ключа на странице учетных данных консоли API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • В производственной среде вам не нужно проходить аутентификацию, если вы запускаете приложение в App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore. В противном случае создайте учетную запись службы .
  2. Установите и включите расширение gRPC для PHP, которое вам понадобится для использования клиентской библиотеки.
  3. Добавьте в свое приложение библиотеку PHP Cloud Firestore:
    composer require google/cloud-firestore
C #
  1. Клиентские библиотеки сервера Cloud Firestore (Java, Node.js, Python, Go, PHP, C # и Ruby) используют для аутентификации учетные данные приложения Google по умолчанию .
    • Для аутентификации из среды разработки установите GOOGLE_APPLICATION_CREDENTIALS среды 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 среды GOOGLE_APPLICATION_CREDENTIALS чтобы она указывала на файл ключа учетной записи службы JSON. Вы можете создать файл ключа на странице учетных данных консоли API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • В производственной среде вам не нужно проходить аутентификацию, если вы запускаете приложение в App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore. В противном случае создайте учетную запись службы .
  2. Добавьте библиотеку Ruby Cloud Firestore в свое приложение в 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, который позволяет вашему приложению взаимодействовать с содержимым и конфигурацией эмулируемой базы данных, а также с дополнительными ресурсами вашего эмулируемого проекта (функциями, другими базами данных и правилами безопасности). Обратите внимание, что Local Emulator Suite еще не поддерживает эмулируемое облачное хранилище.

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

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

Доступно подробное пошаговое руководство, включающее Cloud Firestore и Cloud Functions . Вам также стоит взглянуть на введение в Local Emulator Suite .

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

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

Интернет v8

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

var db = firebase.firestore();
Значения `initializeApp` можно найти в вашем веб - приложения ` firebaseConfig` . Чтобы сохранить данные, когда устройство теряет соединение, см. Документацию о включении автономных данных .

Интернет v9

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

const db = getFirestore();
Значения `initializeApp` можно найти в вашем веб - приложения ` firebaseConfig` . Чтобы сохранить данные, когда устройство теряет соединение, см. Документацию о включении автономных данных .
Быстрый
import Firebase
FirebaseApp.configure()

let db = Firestore.firestore()
Цель-C
@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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную справку см. В разделе Инициализация 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 на собственном сервере, используйте служебную учетную запись .

    Перейдите в IAM и администратор> Учетные записи служб в консоли Cloud Platform. Создайте новый закрытый ключ и сохраните файл 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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную справку см. В разделе Инициализация Admin SDK .
  • Инициализировать на облачной платформе Google
    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 и администратор> Учетные записи служб в консоли Cloud Platform. Создайте новый закрытый ключ и сохраните файл 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()
    
  • 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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную справку см. В разделе Инициализация Admin SDK .
    • Инициализировать функции в облаке
      const admin = require('firebase-admin');
      admin.initializeApp();
      
      const db = admin.firestore();
      
    • Инициализировать на Google Cloud Platform
      const admin = require('firebase-admin');
      admin.initializeApp({
        credential: admin.credential.applicationDefault()
      });
      
      const db = admin.firestore();
    • Инициализировать на собственном сервере

      Чтобы использовать Firebase Admin SDK на собственном сервере (или в любой другой среде Node.js), используйте учетную запись службы . Перейдите в IAM и администратор> Учетные записи служб в консоли Cloud Platform. Создайте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации SDK:

      const admin = require('firebase-admin');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      admin.initializeApp({
        credential: admin.credential.cert(serviceAccount)
      });
      
      const db = admin.firestore();
      
    Идти
    SDK Cloud Firestore инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную справку см. В разделе Инициализация 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 на собственном сервере, используйте служебную учетную запись .

    Перейдите в IAM и администратор> Учетные записи служб в консоли Cloud Platform. Создайте новый закрытый ключ и сохраните файл 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);
    }
    Единство
    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"
    
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

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

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

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

    Интернет v8

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

    Интернет v9

    import { collection, addDoc } from "firebase/firestore"; 
    
    try {
      const docRef = await addDoc(collection(db, "users"), {
        first: "Ada",
        last: "Lovelace",
        born: 1815
      });
      console.log("Document written with ID: ", docRef.id);
    } catch (e) {
      console.error("Error adding document: ", e);
    }
    Быстрый
    // 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
    // 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
    })
    C ++
    // Add a new document with a generated ID
    Future<DocumentReference> user_ref =
        db->Collection("users").Add({{"first", FieldValue::String("Ada")},
                                     {"last", FieldValue::String("Lovelace")},
                                     {"born", FieldValue::Integer(1815)}});
    
    user_ref.OnCompletion([](const Future<DocumentReference>& future) {
      if (future.error() == Error::kErrorOk) {
        std::cout << "DocumentSnapshot added with ID: " << future.result()->id()
                  << '\n';
      } else {
        std::cout << "Error adding document: " << future.error_message() << '\n';
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Идти
    _, _, 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);
    Единство
    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 . Обратите внимание, что этот документ включает пару «ключ-значение» (отчество), которой нет в первом документе. Документы в коллекции могут содержать разные наборы информации.

    Интернет v8

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

    Интернет v9

    // Add a second document with a generated ID.
    import { addDoc, collection } from "firebase/firestore"; 
    
    try {
      const docRef = await addDoc(collection(db, "users"), {
        first: "Alan",
        middle: "Mathison",
        last: "Turing",
        born: 1912
      });
    
      console.log("Document written with ID: ", docRef.id);
    } catch (e) {
      console.error("Error adding document: ", e);
    }
    Быстрый
    // 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
    // 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
    })
    C ++
    db->Collection("users")
        .Add({{"first", FieldValue::String("Alan")},
              {"middle", FieldValue::String("Mathison")},
              {"last", FieldValue::String("Turing")},
              {"born", FieldValue::Integer(1912)}})
        .OnCompletion([](const Future<DocumentReference>& future) {
          if (future.error() == Error::kErrorOk) {
            std::cout << "DocumentSnapshot added with ID: "
                      << future.result()->id() << '\n';
          } else {
            std::cout << "Error adding document: " << future.error_message()
                      << '\n';
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Идти
    _, _, 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);
    Единство
    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."

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

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

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

    Интернет v8

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

    Интернет v9

    import { collection, getDocs } from "firebase/firestore"; 
    
    const querySnapshot = await getDocs(collection(db, "users"));
    querySnapshot.forEach((doc) => {
      console.log(`${doc.id} => ${doc.data()}`);
    });
    Быстрый
    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
    [[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()}')
    C ++
    Future<QuerySnapshot> users = db->Collection("users").Get();
    users.OnCompletion([](const Future<QuerySnapshot>& future) {
      if (future.error() == Error::kErrorOk) {
        for (const DocumentSnapshot& document : future.result()->documents()) {
          std::cout << document << '\n';
        }
      } else {
        std::cout << "Error getting documents: " << future.error_message()
                  << '\n';
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Идти
    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);
    Единство
    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

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

    Если вы используете SDK для Интернета, Android или iOS, используйте Firebase Authentication и правила безопасности 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 != 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 см. В одном из следующих видеоуроков:

    Интернет v8

    iOS
    Android

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

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

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

    • Codelabs - научитесь использовать Cloud Firestore в реальном приложении, следуя таблицам кодов для Android , iOS или Интернета .
    • Модель данных - узнайте больше о том, как данные структурированы в Cloud Firestore, включая иерархические данные и вложенные коллекции.
    • Добавить данные - узнайте больше о создании и обновлении данных в Cloud Firestore.
    • Получить данные - узнайте больше о том, как получить данные.
    • Выполнение простых и составных запросов - узнайте, как выполнять простые и составные запросы.
    • Запросы на заказ и ограничение. Узнайте, как упорядочить и ограничить данные, возвращаемые вашими запросами.