O Cloud Firestore é um banco de dados NoSQL orientado a documentos. Ao contrário de um banco de dados SQL, não há tabelas ou linhas. Em vez disso, você armazena dados 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 pequenos documentos.
Todos os documentos devem ser armazenados em coleções. Os documentos podem conter subcoleções e objetos aninhados, os quais podem incluir campos primitivos como strings ou objetos complexos como listas.
Coleções e documentos são criados implicitamente no Cloud Firestore. Simplesmente atribua 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 representando um usuário alovelace
pode se parecer com isto:
first : "Ada"
last : "Lovelace"
born : 1815
Objetos complexos e aninhados em um documento são chamados de mapas. Por exemplo, você pode estruturar o nome do usuário do exemplo acima com um mapa, assim:
name :
first : "Ada"
last : "Lovelace"
born : 1815
Você pode perceber que os documentos se parecem muito com JSON. Na verdade, eles basicamente são. Existem algumas diferenças (por exemplo, documentos suportam tipos de dados extras e são limitados em tamanho a 1 MB), mas, em geral, você pode tratar documentos como registros JSON leves.
Coleções
Os documentos vivem em coleções, que são simplesmente recipientes para documentos. Por exemplo, você pode ter uma coleção de users
para conter seus vários usuários, cada um representado por um documento:
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
O Cloud Firestore não tem esquema, então você tem total liberdade sobre quais campos colocar em cada documento e quais tipos de dados armazenar nesses campos. Todos os documentos dentro da mesma coleção podem conter campos diferentes ou armazenar diferentes tipos de dados nesses campos. No entanto, é uma boa ideia usar os mesmos campos e tipos de dados em vários documentos, para que você possa consultá-los com mais facilidade.
Uma coleção contém documentos e nada mais. Ele não pode conter diretamente campos brutos com valores e não pode conter outras coleções. (Consulte Dados hierárquicos para obter uma explicação sobre como estruturar dados mais complexos no Cloud Firestore.)
Os nomes dos documentos em uma coleção são exclusivos. Você pode fornecer suas próprias chaves, como IDs de usuário, ou pode permitir que o Cloud Firestore crie IDs aleatórios para você automaticamente.
Você não precisa "criar" ou "excluir" coleções. Depois de criar o primeiro documento em uma coleção, a coleção existe. Se você excluir todos os documentos de uma coleção, ela não existirá mais.
Referências
Cada documento no Cloud Firestore é identificado exclusivamente por sua localização no banco de dados. O exemplo anterior mostrou um documento alovelace
dentro da coleção users
. Para fazer referência a esse local em seu código, você pode criar uma referência a ele.
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Rápido
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
Pitão
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Vai
PHP
PHP
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Unidade
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C #
C #
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Rubi
Uma referência é um objeto leve que apenas aponta para um local em seu banco de dados. Você pode criar uma referência independentemente de existirem ou não dados nela, e 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 version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
Rápido
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
Pitão
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Vai
PHP
PHP
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Unidade
CollectionReference collectionRef = db.Collection("users");
C #
C #
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Rubi
Por conveniência, você também pode criar referências especificando o caminho para um documento ou coleção como uma string, com os componentes do caminho separados por uma barra ( /
). Por exemplo, para criar uma referência ao documento alovelace
:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
Rápido
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
Pitão
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Vai
PHP
PHP
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Unidade
DocumentReference documentRef = db.Document("users/alovelace");
C #
C #
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Rubi
Dados Hierárquicos
Para entender como as estruturas de dados hierárquicos funcionam no Cloud Firestore, considere um aplicativo de chat de exemplo com mensagens e salas de chat.
Você pode criar uma coleção chamada rooms
para armazenar diferentes salas de chat:
name : "my chat room"
...
Agora que você tem salas de bate-papo, decida como armazenar suas mensagens. Você pode não querer armazená-los no documento da sala de bate-papo. Os documentos no Cloud Firestore devem ser leves e uma sala de chat pode conter um grande número de mensagens. No entanto, você pode criar coleções adicionais no documento de sua sala de bate-papo, como subcoleções.
Subcoleções
A melhor maneira de armazenar mensagens nesse cenário é usando subcoleções. Uma subcoleção é uma coleção associada a um documento específico.
Você pode criar uma subcoleção chamada messages
para cada documento de quarto em sua coleção de rooms
:
name : "my chat room"
from : "alex"
msg : "Hello World!"
mensagem
classe2...
...
Neste exemplo, você criaria uma referência a uma mensagem na subcoleção com o seguinte código:
Web version 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web version 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Rápido
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
Pitão
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Vai
PHP
PHP
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Unidade
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C #
C #
Para saber mais sobre como instalar e criar um cliente Cloud Firestore, consulte Bibliotecas de cliente Cloud Firestore .
Rubi
Observe o padrão alternado de coleções e documentos. Suas coleções e documentos devem sempre seguir esse padrão. Você não pode referenciar uma coleção em uma coleção ou um documento em um documento.
As subcoleções permitem que você estruture os dados hierarquicamente, facilitando o acesso aos dados. Para obter todas as mensagens em roomA
, você pode criar uma referência de coleção para as messages
da subcoleção e interagir com ela como faria com qualquer outra referência de coleção.
Documentos em subcoleções também podem conter subcoleções, permitindo que você aninhe mais dados. Você pode aninhar dados em até 100 níveis de profundidade.