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