Модель данных Cloud Firestore

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. Фактически, они ими и являются. Есть некоторые различия (например, документы поддерживают дополнительные типы данных и ограничены размером документа ), но в целом вы можете рассматривать документы как облегченные записи JSON.

Коллекции

Документы хранятся в коллекциях, которые представляют собой просто контейнеры для документов. Например, у вас может быть коллекция users , содержащая различных пользователей, каждый из которых представлен отдельным документом:

  • users

    • аловелайс

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore is schemaless, so you have complete freedom over what fields you put in each document and what data types you store in those fields. Documents within the same collection can all contain different fields or store different types of data in those fields. However, it's a good idea to use the same fields and data types across multiple documents, so that you can query the documents more easily.

Коллекция содержит только документы и ничего больше. Она не может напрямую содержать поля со значениями и не может содержать другие коллекции. (См. раздел «Иерархические данные» для объяснения того, как структурировать более сложные данные в 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');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db->collection('samples/php/users')->document('alovelace');
Единство
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Руби
document_ref = firestore.col("users").doc("alovelace")

Ссылка — это легковесный объект, который просто указывает на местоположение в вашей базе данных. Вы можете создать ссылку независимо от того, существуют ли там данные, и создание ссылки не выполняет никаких сетевых операций.

Вы также можете создавать ссылки на коллекции :

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let usersCollectionRef = db.collection("users")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$collection = $db->collection('samples/php/users');
Единство
CollectionReference collectionRef = db.Collection("users");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

CollectionReference collectionRef = db.Collection("users");
Руби
collection_ref = firestore.col "users"

Для удобства вы также можете создавать ссылки, указывая путь к документу или коллекции в виде строки, где компоненты пути разделены косой чертой ( / ). Например, чтобы создать ссылку на документ alovelace :

Web

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db->document('users/alovelace');
Единство
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db.Document("users/alovelace");
Руби
document_path_ref = firestore.doc "users/alovelace"

Иерархические данные

Чтобы понять, как работают иерархические структуры данных в Cloud Firestore , рассмотрим пример чат-приложения с сообщениями и чат-комнатами.

Вы можете создать коллекцию под названием rooms для хранения различных чатов:

  • комнаты

    • комнатаА

      name : "my chat room"

    • комнатаB

      ...

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

Подколлекции

В этом сценарии наилучший способ хранения сообщений — использование подколлекций. Подколлекция — это коллекция, связанная с конкретным документом.

Для каждого документа комнаты в вашей коллекции rooms можно создать подколлекцию с именем messages :

  • комнаты

    • комнатаА

      name : "my chat room"

      • сообщения

        • сообщение1

          from : "alex"
          msg : "Hello World!"

        • сообщение2

          ...

    • комнатаB

      ...

В этом примере вы создадите ссылку на сообщение в подколлекции с помощью следующего кода:

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');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Единство
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Руби
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Обратите внимание на чередование коллекций и документов. Ваши коллекции и документы всегда должны следовать этому шаблону. Вы не можете ссылаться на коллекцию внутри коллекции или на документ внутри документа.

Вложенные коллекции позволяют структурировать данные иерархически, упрощая доступ к ним. Чтобы получить все сообщения в roomA , можно создать ссылку на коллекцию messages вложенной коллекции и взаимодействовать с ней так же, как и с любой другой ссылкой на коллекцию.

Документы в подколлекциях могут содержать и подколлекции, что позволяет создавать еще более вложенные структуры данных. Вложенность данных может достигать 100 уровней.

,

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. Фактически, они ими и являются. Есть некоторые различия (например, документы поддерживают дополнительные типы данных и ограничены размером документа ), но в целом вы можете рассматривать документы как облегченные записи JSON.

Коллекции

Документы хранятся в коллекциях, которые представляют собой просто контейнеры для документов. Например, у вас может быть коллекция users , содержащая различных пользователей, каждый из которых представлен отдельным документом:

  • users

    • аловелайс

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore is schemaless, so you have complete freedom over what fields you put in each document and what data types you store in those fields. Documents within the same collection can all contain different fields or store different types of data in those fields. However, it's a good idea to use the same fields and data types across multiple documents, so that you can query the documents more easily.

Коллекция содержит только документы и ничего больше. Она не может напрямую содержать поля со значениями и не может содержать другие коллекции. (См. раздел «Иерархические данные» для объяснения того, как структурировать более сложные данные в 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');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db->collection('samples/php/users')->document('alovelace');
Единство
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Руби
document_ref = firestore.col("users").doc("alovelace")

Ссылка — это легковесный объект, который просто указывает на местоположение в вашей базе данных. Вы можете создать ссылку независимо от того, существуют ли там данные, и создание ссылки не выполняет никаких сетевых операций.

Вы также можете создавать ссылки на коллекции :

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let usersCollectionRef = db.collection("users")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$collection = $db->collection('samples/php/users');
Единство
CollectionReference collectionRef = db.Collection("users");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

CollectionReference collectionRef = db.Collection("users");
Руби
collection_ref = firestore.col "users"

Для удобства вы также можете создавать ссылки, указывая путь к документу или коллекции в виде строки, где компоненты пути разделены косой чертой ( / ). Например, чтобы создать ссылку на документ alovelace :

Web

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db->document('users/alovelace');
Единство
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db.Document("users/alovelace");
Руби
document_path_ref = firestore.doc "users/alovelace"

Иерархические данные

Чтобы понять, как работают иерархические структуры данных в Cloud Firestore , рассмотрим пример чат-приложения с сообщениями и чат-комнатами.

Вы можете создать коллекцию под названием rooms для хранения различных чатов:

  • комнаты

    • комнатаА

      name : "my chat room"

    • комнатаB

      ...

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

Подколлекции

В этом сценарии наилучший способ хранения сообщений — использование подколлекций. Подколлекция — это коллекция, связанная с конкретным документом.

Для каждого документа комнаты в вашей коллекции rooms можно создать подколлекцию с именем messages :

  • комнаты

    • комнатаА

      name : "my chat room"

      • сообщения

        • сообщение1

          from : "alex"
          msg : "Hello World!"

        • сообщение2

          ...

    • комнатаB

      ...

В этом примере вы создадите ссылку на сообщение в подколлекции с помощью следующего кода:

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');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Единство
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Руби
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Обратите внимание на чередование коллекций и документов. Ваши коллекции и документы всегда должны следовать этому шаблону. Вы не можете ссылаться на коллекцию внутри коллекции или на документ внутри документа.

Вложенные коллекции позволяют структурировать данные иерархически, упрощая доступ к ним. Чтобы получить все сообщения в roomA , можно создать ссылку на коллекцию messages вложенной коллекции и взаимодействовать с ней так же, как и с любой другой ссылкой на коллекцию.

Документы в подколлекциях могут содержать и подколлекции, что позволяет создавать еще более вложенные структуры данных. Вложенность данных может достигать 100 уровней.

,

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. Фактически, они ими и являются. Есть некоторые различия (например, документы поддерживают дополнительные типы данных и ограничены размером документа ), но в целом вы можете рассматривать документы как облегченные записи JSON.

Коллекции

Документы хранятся в коллекциях, которые представляют собой просто контейнеры для документов. Например, у вас может быть коллекция users , содержащая различных пользователей, каждый из которых представлен отдельным документом:

  • users

    • аловелайс

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore is schemaless, so you have complete freedom over what fields you put in each document and what data types you store in those fields. Documents within the same collection can all contain different fields or store different types of data in those fields. However, it's a good idea to use the same fields and data types across multiple documents, so that you can query the documents more easily.

Коллекция содержит только документы и ничего больше. Она не может напрямую содержать поля со значениями и не может содержать другие коллекции. (См. раздел «Иерархические данные» для объяснения того, как структурировать более сложные данные в 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');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db->collection('samples/php/users')->document('alovelace');
Единство
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Руби
document_ref = firestore.col("users").doc("alovelace")

Ссылка — это легковесный объект, который просто указывает на местоположение в вашей базе данных. Вы можете создать ссылку независимо от того, существуют ли там данные, и создание ссылки не выполняет никаких сетевых операций.

Вы также можете создавать ссылки на коллекции :

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let usersCollectionRef = db.collection("users")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$collection = $db->collection('samples/php/users');
Единство
CollectionReference collectionRef = db.Collection("users");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

CollectionReference collectionRef = db.Collection("users");
Руби
collection_ref = firestore.col "users"

Для удобства вы также можете создавать ссылки, указывая путь к документу или коллекции в виде строки, где компоненты пути разделены косой чертой ( / ). Например, чтобы создать ссылку на документ alovelace :

Web

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db->document('users/alovelace');
Единство
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db.Document("users/alovelace");
Руби
document_path_ref = firestore.doc "users/alovelace"

Иерархические данные

Чтобы понять, как работают иерархические структуры данных в Cloud Firestore , рассмотрим пример чат-приложения с сообщениями и чат-комнатами.

Вы можете создать коллекцию под названием rooms для хранения различных чатов:

  • комнаты

    • комнатаА

      name : "my chat room"

    • комнатаB

      ...

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

Подколлекции

В этом сценарии наилучший способ хранения сообщений — использование подколлекций. Подколлекция — это коллекция, связанная с конкретным документом.

Для каждого документа комнаты в вашей коллекции rooms можно создать подколлекцию с именем messages :

  • комнаты

    • комнатаА

      name : "my chat room"

      • сообщения

        • сообщение1

          from : "alex"
          msg : "Hello World!"

        • сообщение2

          ...

    • комнатаB

      ...

В этом примере вы создадите ссылку на сообщение в подколлекции с помощью следующего кода:

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');
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
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
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Идти

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Единство
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Для получения дополнительной информации об установке и создании клиента Cloud Firestore см. раздел «Библиотеки клиентов Cloud Firestore .

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Руби
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Обратите внимание на чередование коллекций и документов. Ваши коллекции и документы всегда должны следовать этому шаблону. Вы не можете ссылаться на коллекцию внутри коллекции или на документ внутри документа.

Вложенные коллекции позволяют структурировать данные иерархически, упрощая доступ к ним. Чтобы получить все сообщения в roomA , можно создать ссылку на коллекцию messages вложенной коллекции и взаимодействовать с ней так же, как и с любой другой ссылкой на коллекцию.

Документы в подколлекциях могут содержать и подколлекции, что позволяет создавать еще более вложенные структуры данных. Вложенность данных может достигать 100 уровней.