Cloud Firestore – это документоориентированная база данных NoSQL. В отличие от базы данных SQL, здесь нет таблиц или строк. Вместо этого данные хранятся в документах, которые организованы в коллекции.
Каждый документ содержит набор пар "ключ-значение". Cloud Firestore оптимизирована для хранения больших коллекций небольших документов.
Все документы должны храниться в коллекциях. Документы могут содержать вложенные коллекции и объекты, которые, в свою очередь, могут включать примитивные поля, например строки, или сложные объекты, например списки.
Коллекции и документы создаются в Cloud Firestore неявно. Просто назначьте данные документу в коллекции. Если коллекция или документ не существуют, Cloud Firestore создаст их.
Документы
В Cloud Firestore единицей хранения является документ. Документ – это небольшая запись, содержащая поля, которые сопоставляются со значениями. Каждый документ идентифицируется по имени.
Документ, представляющий пользователя alovelace, может выглядеть следующим образом:
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Сложные вложенные объекты в документе называются картами. Например, имя пользователя из примера выше можно структурировать с помощью карты следующим образом:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Вы можете заметить, что документы очень похожи на JSON. По сути, так и есть. Есть некоторые различия (например, документы поддерживают дополнительные типы данных и ограничены размером документа), но в целом вы можете рассматривать документы как облегченные записи JSON.
подборки

Документы хранятся в коллекциях, которые представляют собой контейнеры для документов. Например, у вас может быть коллекция users, содержащая различных пользователей, каждый из которых представлен документом:
пользователя
alovelace
first : "Ada"
last : "Lovelace"
born : 1815aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore не имеет схемы, поэтому вы можете добавлять в документы любые поля и хранить в них данные любых типов. Документы в одной коллекции могут содержать разные поля или хранить в этих полях разные типы данных. Однако рекомендуется использовать одни и те же поля и типы данных в нескольких документах, чтобы упростить отправку запросов к ним.
Подборка содержит только документы. Она не может напрямую содержать необработанные поля со значениями и другие коллекции. Подробнее о том, как структурировать более сложные данные в Cloud Firestore, читайте в статье Иерархические данные.
Названия документов в коллекции уникальны. Вы можете указать собственные ключи, например идентификаторы пользователей, или разрешить Cloud Firestore автоматически создавать случайные идентификаторы.
Вам не нужно создавать или удалять коллекции. После создания первого документа в коллекции она начинает существовать. Если вы удалите все документы в коллекции, она перестанет существовать.
Ссылки
Каждый документ в Cloud Firestore уникально идентифицируется по его местоположению в базе данных. В предыдущем примере показан документ alovelace в коллекции users. Чтобы ссылаться на это местоположение в коде, вы можете создать ссылку на него.
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Kotlin
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
Python
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Проложить маршрут
PHP
PHP
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Ruby
Ссылка – это простой объект, который указывает на местоположение в базе данных. Вы можете создать ссылку независимо от того, есть ли там данные. При этом не выполняются никакие сетевые операции.
Вы также можете создавать ссылки на коллекции:
Web
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
Objective-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin
val usersCollectionRef = db.collection("users")
Java
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
Java
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Проложить маршрут
PHP
PHP
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Ruby
Для удобства вы также можете создавать ссылки, указывая путь к документу или коллекции в виде строки, компоненты которой разделены косой чертой (/). Например, чтобы создать ссылку на документ alovelace:
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Kotlin
val alovelaceDocumentRef = db.document("users/alovelace")
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
Java
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Проложить маршрут
PHP
PHP
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Ruby
Иерархические данные
Чтобы понять, как работают иерархические структуры данных в Cloud Firestore, рассмотрим пример мессенджера с сообщениями и чат-комнатами.
Вы можете создать коллекцию rooms, чтобы хранить в ней разные чат-комнаты:
переговорных комнат
комната
name : "my chat room"roomB
...
Теперь, когда у вас есть чат-комнаты, решите, как вы будете хранить сообщения. Возможно, вы не захотите хранить их в документе чат-комнаты. Документы в Cloud Firestore должны быть небольшими, а чат-комната может содержать большое количество сообщений. Однако вы можете создать дополнительные коллекции в документе чат-комнаты в качестве подколлекций.
Вложенные подборки
В этом случае лучше всего хранить сообщения в подколлекциях. Подколлекция – это коллекция, связанная с определенным документом.
Вы можете создать подколлекцию messages для каждого документа комнаты в коллекции rooms:
переговорных комнат
комната
name : "my chat room"сообщение
message1
from : "alex"
msg : "Hello World!"message2
...
roomB
...
В этом примере вы создадите ссылку на сообщение в подколлекции с помощью следующего кода:
Web
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Swift
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objective-C
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Kotlin
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Dart
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
Java
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Проложить маршрут
PHP
PHP
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Чтобы выполнить аутентификацию в Cloud Firestore, настройте Application Default Credentials. Подробнее о том, как настроить аутентификацию для локальной среды разработки…
Ruby
Обратите внимание на чередование коллекций и документов. Ваши коллекции и документы всегда должны следовать этому шаблону. Вы не можете ссылаться на коллекцию в коллекции или на документ в документе.
Подколлекции позволяют структурировать данные иерархически, упрощая доступ к ним. Чтобы получить все сообщения в roomA, вы можете создать ссылку на подколлекцию messages и взаимодействовать с ней так же, как и с любой другой ссылкой на коллекцию.
Документы в подколлекциях также могут содержать подколлекции, что позволяет дополнительно вкладывать данные. Максимальный уровень вложенности данных – 100.