Начните работу с Cloud Firestore Enterprise Edition.

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

Cloud Firestore поддерживает мобильные и веб-SDK, а также клиентские библиотеки для серверов:

  • Cloud Firestore поддерживает SDK для Android, iOS, веб-приложений и других платформ . В сочетании с Cloud Firestore Security Rules и Firebase Authentication , мобильные и веб-SDK поддерживают бессерверные архитектуры приложений, где клиенты подключаются напрямую к вашей базе данных Cloud Firestore .

  • Cloud Firestore поддерживает серверные клиентские библиотеки для Java, Node.js и Python. Используйте эти клиентские библиотеки для настройки привилегированных серверных сред с полным доступом к вашей базе данных. Подробнее об этих библиотеках можно узнать в кратком руководстве по серверным клиентским библиотекам .

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

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

  2. Откройте свой проект в консоли Firebase . В левой панели разверните раздел «Сборка» , а затем выберите базу данных Firestore .

  3. Нажмите «Создать базу данных» .

  4. Выберите режим базы данных «Предприятие» .

  5. Выберите режим работы Firestore in Native Mode , который поддерживает операции Core и Pipeline.

  6. Выберите местоположение для вашей базы данных.

  7. Выберите режим запуска Cloud Firestore Security Rules :

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

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

    Для начала работы с веб-версией, платформами Apple или Android SDK выберите тестовый режим.

    Режим производства

    Запрещает все операции чтения и записи с мобильных и веб-клиентов. Ваши аутентифицированные серверы приложений (Python) по-прежнему смогут получать доступ к вашей базе данных.

    Первоначальный набор Cloud Firestore Security Rules будет применяться к вашей базе данных Cloud Firestore по умолчанию. Если вы создадите несколько баз данных для своего проекта, вы можете развернуть Cloud Firestore Security Rules для каждой из них.

  8. Нажмите «Создать» .

При включении Cloud Firestore Enterprise Edition также активируется API в Cloud API Manager .

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

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

Web

  1. Следуйте инструкциям, чтобы добавить Firebase в ваше веб-приложение .
  2. SDK Cloud Firestore доступен в виде пакета npm.
    npm install firebase@12.9.0 --save
    Вам потребуется импортировать как Firebase, так и Cloud Firestore .
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
iOS+

Следуйте инструкциям, чтобы добавить Firebase в ваше приложение Apple .

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode, открыв проект приложения, перейдите в меню File > Swift Packages > Add Package Dependency .
  2. При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку Firestore.
  5. После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
Android
  1. Следуйте инструкциям, чтобы добавить Firebase в ваше Android-приложение .
  2. Используя Firebase Android BoM , укажите зависимость от библиотеки Cloud Firestore для Android в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle.kts или app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.8.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:26.1.0")
    }

    Ищете модуль библиотеки, специально предназначенный для Kotlin? Начиная с релиза в октябре 2023 года , разработчики на Kotlin и Java могут использовать основной модуль библиотеки (подробнее см. в разделе часто задаваемых вопросов об этой инициативе ).

Инициализация Cloud Firestore

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

Web

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://support.google.com/firebase/answer/7015592
const firebaseConfig = {
    FIREBASE_CONFIGURATION
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);


// When initializing Firestore, remember to use the name of the database you created earlier:
const db = initializeFirestore(app, {}, 'your-new-enterprise-database');

Замените FIREBASE_CONFIGURATION на значение firebaseConfig вашего веб-приложения.

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

Быстрый
import FirebaseCore
import FirebaseFirestore

FirebaseApp.configure()

// When initializing Firestore, remember to use the name of the database you created earlier:
let db = Firestore.firestore(database: "your-new-enterprise-database")

Kotlin

// Access a Cloud Firestore instance from your Activity
// When initializing Firestore, remember to use the name of the database you created earlier:
val firestore = FirebaseFirestore.getInstance("your-new-enterprise-database")

Java

// Access a Cloud Firestore instance from your Activity
// When initializing Firestore, remember to use the name of the database you created earlier:
FirebaseFirestore firestore = FirebaseFirestore.getInstance("your-new-enterprise-database");

Добавление данных с использованием основных операций.

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

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

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

Web

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

Web

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 Clip.
// Add a new document with a generated ID
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}

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

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

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

Web

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

Web

// 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 Clip.
// Add a second document with a generated ID.
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Alan",
    "middle": "Mathison",
    "last": "Turing",
    "born": 1912
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}

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

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

Чтение данных с использованием основных операций.

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

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

Web

import { collection, getDocs } from "firebase/firestore"; 

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

Web

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
do {
  let snapshot = try await db.collection("users").getDocuments()
  for document in snapshot.documents {
    print("\(document.documentID) => \(document.data())")
  }
} catch {
  print("Error getting documents: \(error)")
}

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

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

Чтение данных с использованием операций конвейера.

Теперь вы можете сравнить удобство выполнения запросов в Pipeline с удобством выполнения запросов в Core.

Web

// The import/require of "firebase/firestore/pipelines" has a side-effect
// of extending the Firestore class with the `.pipeline()` method.
// Without this import/require, you will not be able to create a Pipeline.
// import { execute } from "firebase/firestore/pipelines";
const readDataPipeline = db.pipeline()
  .collection("users");

// Execute the pipeline and handle the result
try {
  const querySnapshot = await execute(readDataPipeline);
  querySnapshot.results.forEach((result) => {
    console.log(`${result.id} => ${result.data()}`);
  });
} catch (error) {
    console.error("Error getting documents: ", error);
}
Быстрый
do {
  // Initialize a Firestore Pipeline instance and specify the "users" collection as the
  // input stage.
  let snapshot = try await db.pipeline()
    .collection("users")
    .execute() // Execute the pipeline to retrieve documents.

  // Iterate through the documents in the pipeline results, similar to a regular query
  // snapshot.
  for result in snapshot.results {
    print("\(result.id ?? "no ID") => \(result.data)")
  }
} catch {
  print("Error getting documents with pipeline: \(error)")
}

Kotlin

val readDataPipeline = db.pipeline()
    .collection("users")

// Execute the pipeline and handle the result
readDataPipeline.execute()
    .addOnSuccessListener { result ->
        for (document in result) {
            println("${document.getId()} => ${document.getData()}")
        }
    }
    .addOnFailureListener { exception ->
        println("Error getting documents: $exception")
    }

Java

Pipeline readDataPipeline = db.pipeline()
.collection("users");

readDataPipeline.execute()
.addOnSuccessListener(new OnSuccessListener<Pipeline.Snapshot>() {
    @Override
    public void onSuccess(Pipeline.Snapshot snapshot) {
        for (PipelineResult result : snapshot.getResults()) {
            System.out.println(result.getId() + " => " + result.getData());
        }
    }
})
.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        System.out.println("Error getting documents: " + e);
    }
});

Защитите свои данные для мобильных и веб-SDK.

Если вы используете SDK для веб-платформ, Android или Apple, используйте Firebase Authentication и Cloud Firestore Security Rules для защиты ваших данных в Cloud Firestore .

Вот несколько базовых наборов правил, которые вы можете использовать для начала работы. Вы можете изменить свои правила безопасности на вкладке «Правила» в консоли.

Требуется авторизация

// Allow read/write access to a document keyed by the user's UID
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid} {
      allow read, write: if request.auth != null && request.auth.uid == uid;
    }
  }
}

Режим производства

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

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

Если вы используете один из серверных SDK, воспользуйтесь системой управления идентификацией и доступом (IAM) для защиты ваших данных в Cloud Firestore .

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

Углубите свои знания в области основных и трубопроводных операций, изучив следующие темы:

,

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

Cloud Firestore поддерживает мобильные и веб-SDK, а также клиентские библиотеки для серверов:

  • Cloud Firestore поддерживает SDK для Android, iOS, веб-приложений и других платформ . В сочетании с Cloud Firestore Security Rules и Firebase Authentication , мобильные и веб-SDK поддерживают бессерверные архитектуры приложений, где клиенты подключаются напрямую к вашей базе данных Cloud Firestore .

  • Cloud Firestore поддерживает серверные клиентские библиотеки для Java, Node.js и Python. Используйте эти клиентские библиотеки для настройки привилегированных серверных сред с полным доступом к вашей базе данных. Подробнее об этих библиотеках можно узнать в кратком руководстве по серверным клиентским библиотекам .

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

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

  2. Откройте свой проект в консоли Firebase . В левой панели разверните раздел «Сборка» , а затем выберите базу данных Firestore .

  3. Нажмите «Создать базу данных» .

  4. Выберите режим базы данных «Предприятие» .

  5. Выберите режим работы Firestore in Native Mode , который поддерживает операции Core и Pipeline.

  6. Выберите местоположение для вашей базы данных.

  7. Выберите режим запуска Cloud Firestore Security Rules :

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

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

    Для начала работы с веб-версией, платформами Apple или Android SDK выберите тестовый режим.

    Режим производства

    Запрещает все операции чтения и записи с мобильных и веб-клиентов. Ваши аутентифицированные серверы приложений (Python) по-прежнему смогут получать доступ к вашей базе данных.

    Первоначальный набор Cloud Firestore Security Rules будет применяться к вашей базе данных Cloud Firestore по умолчанию. Если вы создадите несколько баз данных для своего проекта, вы можете развернуть Cloud Firestore Security Rules для каждой из них.

  8. Нажмите «Создать» .

При включении Cloud Firestore Enterprise Edition также активируется API в Cloud API Manager .

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

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

Web

  1. Следуйте инструкциям, чтобы добавить Firebase в ваше веб-приложение .
  2. SDK Cloud Firestore доступен в виде пакета npm.
    npm install firebase@12.9.0 --save
    Вам потребуется импортировать как Firebase, так и Cloud Firestore .
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
iOS+

Следуйте инструкциям, чтобы добавить Firebase в ваше приложение Apple .

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode, открыв проект приложения, перейдите в меню File > Swift Packages > Add Package Dependency .
  2. При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку Firestore.
  5. После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
Android
  1. Следуйте инструкциям, чтобы добавить Firebase в ваше Android-приложение .
  2. Используя Firebase Android BoM , укажите зависимость от библиотеки Cloud Firestore для Android в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle.kts или app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.8.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:26.1.0")
    }

    Ищете модуль библиотеки, специально предназначенный для Kotlin? Начиная с релиза в октябре 2023 года , разработчики на Kotlin и Java могут использовать основной модуль библиотеки (подробнее см. в разделе часто задаваемых вопросов об этой инициативе ).

Инициализация Cloud Firestore

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

Web

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://support.google.com/firebase/answer/7015592
const firebaseConfig = {
    FIREBASE_CONFIGURATION
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);


// When initializing Firestore, remember to use the name of the database you created earlier:
const db = initializeFirestore(app, {}, 'your-new-enterprise-database');

Замените FIREBASE_CONFIGURATION на значение firebaseConfig вашего веб-приложения.

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

Быстрый
import FirebaseCore
import FirebaseFirestore

FirebaseApp.configure()

// When initializing Firestore, remember to use the name of the database you created earlier:
let db = Firestore.firestore(database: "your-new-enterprise-database")

Kotlin

// Access a Cloud Firestore instance from your Activity
// When initializing Firestore, remember to use the name of the database you created earlier:
val firestore = FirebaseFirestore.getInstance("your-new-enterprise-database")

Java

// Access a Cloud Firestore instance from your Activity
// When initializing Firestore, remember to use the name of the database you created earlier:
FirebaseFirestore firestore = FirebaseFirestore.getInstance("your-new-enterprise-database");

Добавление данных с использованием основных операций.

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

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

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

Web

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

Web

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 Clip.
// Add a new document with a generated ID
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}

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

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

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

Web

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

Web

// 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 Clip.
// Add a second document with a generated ID.
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Alan",
    "middle": "Mathison",
    "last": "Turing",
    "born": 1912
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}

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

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

Чтение данных с использованием основных операций.

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

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

Web

import { collection, getDocs } from "firebase/firestore"; 

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

Web

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
do {
  let snapshot = try await db.collection("users").getDocuments()
  for document in snapshot.documents {
    print("\(document.documentID) => \(document.data())")
  }
} catch {
  print("Error getting documents: \(error)")
}

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

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

Чтение данных с использованием операций конвейера.

Теперь вы можете сравнить удобство выполнения запросов в Pipeline с удобством выполнения запросов в Core.

Web

// The import/require of "firebase/firestore/pipelines" has a side-effect
// of extending the Firestore class with the `.pipeline()` method.
// Without this import/require, you will not be able to create a Pipeline.
// import { execute } from "firebase/firestore/pipelines";
const readDataPipeline = db.pipeline()
  .collection("users");

// Execute the pipeline and handle the result
try {
  const querySnapshot = await execute(readDataPipeline);
  querySnapshot.results.forEach((result) => {
    console.log(`${result.id} => ${result.data()}`);
  });
} catch (error) {
    console.error("Error getting documents: ", error);
}
Быстрый
do {
  // Initialize a Firestore Pipeline instance and specify the "users" collection as the
  // input stage.
  let snapshot = try await db.pipeline()
    .collection("users")
    .execute() // Execute the pipeline to retrieve documents.

  // Iterate through the documents in the pipeline results, similar to a regular query
  // snapshot.
  for result in snapshot.results {
    print("\(result.id ?? "no ID") => \(result.data)")
  }
} catch {
  print("Error getting documents with pipeline: \(error)")
}

Kotlin

val readDataPipeline = db.pipeline()
    .collection("users")

// Execute the pipeline and handle the result
readDataPipeline.execute()
    .addOnSuccessListener { result ->
        for (document in result) {
            println("${document.getId()} => ${document.getData()}")
        }
    }
    .addOnFailureListener { exception ->
        println("Error getting documents: $exception")
    }

Java

Pipeline readDataPipeline = db.pipeline()
.collection("users");

readDataPipeline.execute()
.addOnSuccessListener(new OnSuccessListener<Pipeline.Snapshot>() {
    @Override
    public void onSuccess(Pipeline.Snapshot snapshot) {
        for (PipelineResult result : snapshot.getResults()) {
            System.out.println(result.getId() + " => " + result.getData());
        }
    }
})
.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        System.out.println("Error getting documents: " + e);
    }
});

Защитите свои данные для мобильных и веб-SDK.

Если вы используете SDK для веб-платформ, Android или Apple, используйте Firebase Authentication и Cloud Firestore Security Rules для защиты ваших данных в Cloud Firestore .

Вот несколько базовых наборов правил, которые вы можете использовать для начала работы. Вы можете изменить свои правила безопасности на вкладке «Правила» в консоли.

Требуется авторизация

// Allow read/write access to a document keyed by the user's UID
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid} {
      allow read, write: if request.auth != null && request.auth.uid == uid;
    }
  }
}

Режим производства

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

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

Если вы используете один из серверных SDK, воспользуйтесь системой управления идентификацией и доступом (IAM) для защиты ваших данных в Cloud Firestore .

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

Углубите свои знания в области основных и трубопроводных операций, изучив следующие темы: