O Cloud Firestore é um banco de dados NoSQL orientado a documentos. Ao contrário de um banco de dados SQL, não há tabelas nem linhas. Em vez disso, os dados são armazenados em documentos, que são organizados em coleções.
Cada documento contém um conjunto de pares chave-valor. O Cloud Firestore é otimizado para armazenar grandes coleções de documentos pequenos.
É necessário que todos os documentos sejam armazenados em coleções. Os documentos podem conter subcoleções e objetos aninhados, que podem incluir campos primitivos, como strings, ou objetos complexos, como listas.
Coleções e documentos são criados implicitamente no Cloud Firestore. Basta atribuir dados a um documento dentro de uma coleção. Se a coleção ou o documento não existir, o Cloud Firestore o criará.
Documentos
No Cloud Firestore, a unidade de armazenamento é o documento. Um documento é um registro leve que contém campos, que são mapeados para valores. Cada documento é identificado por um nome.
Um documento que representa um usuário alovelace
pode ser assim:
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Objetos complexos e aninhados em um documento são chamados de mapas. Por exemplo, é possível estruturar o nome do usuário do exemplo acima com um mapa, como este:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Observe que os documentos parecem muito com documentos JSON. Na verdade, basicamente eles são. Há algumas diferenças, por exemplo, os documentos têm suporte a tipos de dados extras e têm o tamanho limitado a 1 MB. No entanto, geralmente os documentos podem ser tratados como registros JSON leves.
Coleções
Os documentos pertencem a coleções, que são simplesmente recipientes para documentos. Por
exemplo, é possível ter uma coleção users
para conter seus vários usuários, cada um
representado por um documento:
users
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
O Cloud Firestore não usa esquemas. Portanto, você tem total liberdade sobre quais campos colocar em cada documento e que tipo de dados armazenar nesses campos. Os documentos dentro da mesma coleção podem conter diferentes campos ou armazenar diferentes tipos de dados nesses campos. No entanto, é recomendável usar os mesmos campos e tipos de dados em vários documentos para que seja possível consultar os documentos com mais facilidade.
Uma coleção não contém nada além de documentos. Não pode conter diretamente campos brutos com valores nem outras coleções. (Consulte Dados hierárquicos para saber mais sobre como estruturar dados complexos no Cloud Firestore.)
Os nomes dos documentos dentro de uma coleção são únicos. Forneça suas próprias chaves, como IDs de usuário, ou permita que o Cloud Firestore crie automaticamente IDs aleatórios para você.
Não é preciso "criar" ou "excluir" coleções. Depois de criar o primeiro documento em uma coleção, ela passa a existir. Se você excluir todos os documentos em uma coleção, ela deixará de existir.
Referências
Cada documento no Cloud Firestore é identificado de maneira exclusiva pela respectiva localização
no banco de dados. O exemplo anterior mostrou um documento alovelace
na
coleção users
. Para se referir a este local no seu código, crie uma
referência a ele.
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+KTX
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
Go
PHP
PHP
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Ruby
Uma referência é um objeto leve que aponta apenas para um local no banco de dados. É possível criar uma referência independentemente da existência de dados no banco de dados. A criação de uma referência não executa nenhuma operação de rede.
Você também pode criar referências a coleções:
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+KTX
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
Go
PHP
PHP
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Ruby
Para fins de praticidade, também é possível criar referências especificando o caminho para um
documento ou uma coleção como uma string, com componentes de caminho separados por uma
barra (/
). Por exemplo, para criar uma referência ao documento 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+KTX
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
Go
PHP
PHP
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Ruby
Dados hierárquicos
Para entender como as estruturas hierárquicas de dados funcionam no Cloud Firestore, pense em um exemplo de app de chat com mensagens e salas de conversa.
Crie uma coleção chamada rooms
para armazenar salas de chat diferentes:
rooms
roomA
name : "my chat room"
roomB
...
Agora que você tem salas de bate-papo, decida como armazenar suas mensagens. Talvez o documento da sala de bate-papo não seja uma boa escolha. Os documentos no Cloud Firestore precisam ser leves, e uma sala de bate-papo pode conter um grande número de mensagens. No entanto, é possível criar coleções adicionais no documento da sala de bate-papo, como subcoleções.
Subcoleções
A melhor maneira de armazenar mensagens neste cenário é usando subcoleções. Uma subcoleção é uma coleção associada a um documento específico.
É possível criar uma subcoleção chamada messages
para cada documento da sala
em sua coleção rooms
:
rooms
roomA
name : "my chat room"
messages
message1
from : "alex"
msg : "Hello World!"
message2
...
roomB
...
Neste exemplo, você criaria uma referência para uma mensagem na subcoleção com o seguinte código:
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+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");
Java
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
PHP
PHP
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Para mais informações sobre como instalar e criar um cliente do Cloud Firestore, consulte Bibliotecas de cliente do Cloud Firestore.
Ruby
Observe o padrão alternado de coleções e documentos. É importante que suas coleções e documentos sigam sempre esse padrão. Você não pode se referir a uma coleção em uma coleção ou a um documento em um documento.
As subcoleções permitem que você estruture os dados hierarquicamente, facilitando o
acesso a eles. Para receber todas as mensagens em roomA
, é possível criar uma referência de coleção
para a subcoleção messages
e interagir com ela como faria com outra
referência de coleção.
Documentos em subcoleções também podem conter subcoleções, permitindo que os dados sejam mais aninhados. Você pode aninhar dados até 100 níveis.