Escolar Documentos
Profissional Documentos
Cultura Documentos
Modo de teste
Modo bloqueado
SiteiOSJavaKotlinJavaPythonNode.jsGoPHPC#Ruby
2. Siga as instruções abaixo para inicializar o Cloud Firestore com as credenciais apropriadas no
seu ambiente.
WebSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
admin.initializeApp(functions.config().firebase);
let db = admin.firestore();
index.js
const db = admin.firestore();
// ...
index.js
Para usar o SDK Admin do Firebase mo seu próprio servidor ou em qualquer outro
ambiente Node.js, use uma conta de serviço. Acesse IAM e administrador > Contas
de serviço (em inglês) no Console do Cloud Platform. Gere uma nova chave privada e
salve o arquivo JSON. Em seguida, use o arquivo para inicializar o SDK:
const admin = require('firebase-admin');
let serviceAccount = require('path/to/serviceAccountKey.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
let db = admin.firestore();
Modelo de dados do Cloud Firestore
Documentos
Coleções
O Cloud Firestore não usa esquemas. Portanto, você tem total liberdade sobre
quais os campos colocar em cada documento e que tipos 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 que, assim, poderão ser consultados com mais facilidade.
Uma coleção não contém nada além de documentos. Não pode conter
diretamente campos brutos com valores e não pode conter 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ê.
SiteSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
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.
SiteSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
SiteSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
Agora que você tem salas de bate-papo, decida como armazenar suas
mensagens. Talvez você não queira armazená-las no documento da sala de
bate-papo. 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.
SiteSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
Quando você exclui um documento que tem subcoleções, essas subcoleções não são
excluídas. Por exemplo, pode haver um documento localizado
em coll/doc/subcoll/subdoc mesmo que o documento coll/doc não existe mais.
Remova manualmente os documentos nas subcoleções ao excluir um documento pai,
conforme explicado em Excluir coleções.
Adicionar dados
SiteSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
SiteSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
Ler dados
WebSwiftObjective-CJavaKotlinJavaPythonNode.jsGoPHPMais
db.collection('users').get()
.then((snapshot) => {
snapshot.forEach((doc) => {
console.log(doc.id, '=>', doc.data());
});
})
.catch((err) => {
console.log('Error getting documents', err);
});
index.js
Se você estiver usando o SDK para Android, iOS ou Web, utilize o Firebase
Authentication e as Regras de segurança do Cloud Firestore para proteger
seus dados no Cloud Firestore.
Veja a seguir alguns conjuntos de regras básicas que é possível usar para dar
os primeiros passos. É possível modificar as regras de segurança na guia
Regras do console.
Quando você con gura um listener, o Cloud Firestore envia para ele um snapshot inicial dos
dados e, em seguida, outro snapshot cada vez que o documento é alterado.
vação: as amostras de código abrangem várias linguagens, entretanto, no texto explicativo, são feitas
ncias aos nomes de métodos da Web.
Dados de exemplo
Para começar, escreva alguns dados sobre cidades para demonstrarmos diversas formas
de leitura:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0 1/6
14/07/2020 Receber dados com o Cloud Firestore | Firebase
Receber um documento
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0 2/6
14/07/2020 Receber dados com o Cloud Firestore | Firebase
vação: se não houver um documento no local referenciado por docRef, o resultado document estará vazio
ada de exists retornará false.
Opções de origem
Para plataformas com suporte off-line, de na a opção source para controlar como uma
chamada get usa o cache off-line.
Por padrão, uma chamada get tentará buscar o snapshot do documento mais recente do
seu banco de dados. Nas plataformas com suporte off-line, a biblioteca de cliente usará o
cache off-line se a rede estiver indisponível ou se a solicitação expirar.
É possível especi car a opção source em uma chamada get() para alterar o
comportamento padrão. É possível buscar apenas no banco de dados e ignorar o cache
off-line ou buscar somente no cache off-line. Exemplo:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Objetos personalizados
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
tante: cada classe personalizada precisa ter um construtor público sem argumentos. Além disso, a classe
a incluir um getter público para cada propriedade.
https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0 3/6
14/07/2020 Receber dados com o Cloud Firestore | Firebase
Também é possível recuperar vários documentos com uma solicitação, basta consultar os
documentos em uma coleção. Por exemplo, use where() para consultar todos os
documentos que atendam a uma determinada condição, use get() para recuperar os
resultados:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
index.js (https://github.com/ rebase/snippets-node/blob/d769695bd1159103e7c877849ccaccab3db
Por padrão, o Cloud Firestore recupera todos os documentos que atendem à consulta em
ordem crescente por ID. No entanto, é possível ordenar e limitar os dados retornados
(https:// rebase.google.com/docs/ restore/query-data/order-limit-data?authuser=0).
Além disso, é possível recuperar todos os documentos de uma coleção, basta omitir o ltro
where() completamente:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0 4/6
14/07/2020 Receber dados com o Cloud Firestore | Firebase
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
index.js (https://github.com/ rebase/snippets-node/blob/d769695bd1159103e7c877849ccaccab3db
Um grupo de coleções é composto de todos os conjuntos com o mesmo ID. Por exemplo,
se cada documento da coleção cities tiver uma subcoleção chamada landmarks, todas
as subcoleções de landmarks pertencerão ao mesmo grupo. Por padrão, por meio das
consultas são recuperados resultados de uma única coleção no seu banco de dados. Use
uma consulta de grupo de coleções para recuperar resultados de um grupo
(https:// rebase.google.com/docs/ restore/query-data/queries?authuser=0#collection-group-query),
em vez de uma única coleção.
Não é possível recuperar uma lista de coleções com as bibliotecas de cliente da Web/para
dispositivos móveis. Procure nomes de coleções somente como parte de tarefas
administrativas em ambientes de servidor con áveis. Se você julgar que precisa desse
recurso nas bibliotecas de clientes da Web/para dispositivos móveis, pense em
reestruturar seus dados para que os nomes de subcoleções sejam previsíveis.
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0 5/6
14/07/2020 Receber dados com o Cloud Firestore | Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0 6/6
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
Adicionar um novo documento a uma coleção. Neste caso, o Cloud Firestore gera
automaticamente o identi cador de documento.
Neste guia, explicamos como usar as funções de nir, adicionar ou atualizar documentos
individuais no Cloud Firestore. Se você quiser gravar dados em massa, consulte
Transações e gravações em lote
(https:// rebase.google.com/docs/ restore/manage-data/transactions?authuser=0).
vação: as amostras de código abrangem várias linguagens, entretanto, no texto explicativo, são feitas
ncias aos nomes de métodos da Web.
De nir um documento
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
const data = {
name: 'Los Angeles',
state: 'CA',
country: 'USA'
};
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 1/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
Se o documento não existir, ele será criado. Se o documento existir, o conteúdo dele será
substituído pelos dados recém-fornecidos da seguinte forma, a menos que você
especi que que os dados devem ser incorporados ao documento existente:
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Se você não tiver certeza de que o documento existe, ignore a opção de mesclar novos
dados com qualquer documento atual para evitar a substituição de documentos inteiros.
Tipos de dados
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
const data = {
stringExample: 'Hello, World!',
booleanExample: true,
numberExample: 3.14159265,
dateExample: admin.firestore.Timestamp.fromDate(new Date('December 10, 1815
arrayExample: [5, true, 'hello'],
nullExample: null,
objectExample: {
a: 5,
b: true
}
};
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 2/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
Objetos personalizados
Geralmente, usar os objetos Map ou Dictionary para representar seus documentos não é
muito conveniente. Por isso, o Cloud Firestore é compatível com a gravação de
documentos com classes personalizadas. O Cloud Firestore converte os objetos em tipos
de dados compatíveis.
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Adicionar um documento
Ao usar set() para criar um documento, você precisa especi car um ID para ele. Exemplo:
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
await db.collection('cities').doc('new-city-id').set(data);
index.js (https://github.com/ rebase/snippets-node/blob/26a796e67296ead6921f7c978cf731edaacb
No entanto, às vezes não há um ID signi cativo para o documento. É mais prático que o
Cloud Firestore gere um automaticamente para você. Para fazer isso, basta chamar add():
Java Kotlin+KTX
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 3/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
Android Android
W b( b)S i ( if )Obj i C( bj i ) J ( j )P
tante: ao contrário dos "IDs de push" do Firebase Realtime Database, os códigos IDs gerados automaticam
loud Firestore não têm ordenação automática. Para ordenar seus documentos por data de criação, você
a armazenar nos documentos um carimbo de data/hora como um campo.
Em alguns casos, pode ser útil criar uma referência de documento com um ID gerado
automaticamente, para usá-la mais tarde. Para este caso de uso, chame doc():
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
// Later...
const res = await newCityRef.set({
// ...
});
index.js (https://github.com/ rebase/snippets-node/blob/26a796e67296ead6921f7c978cf731edaacb
Atualizar um documento
Para atualizar alguns campos de um documento sem substituir o documento inteiro, use o
método update():
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 4/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) A d id A d id
Java (#java)P
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
// Update the timestamp field with the value from the server
const res = await docRef.update({
timestamp: FieldValue.serverTimestamp()
});
index.js (https://github.com/ rebase/snippets-node/blob/26a796e67296ead6921f7c978cf731edaacb
Se o documento contiver objetos aninhados, será possível usar "notação por pontos" para
se referir a campos aninhados no documento quando chamar update():
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
const initialData = {
name: 'Frank',
age: 12,
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 5/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
favorites: {
food: 'Pizza',
color: 'Blue',
subject: 'recess'
}
};
// ...
const res = await db.collection('users').doc('Frank').update({
age: 13,
'favorites.color': 'Red'
});
index.js (https://github.com/ rebase/snippets-node/blob/26a796e67296ead6921f7c978cf731edaacb
tante: ao tentar atualizar campos aninhados em um documento, é importante estar ciente de que existe u
nça semântica sutil entre as opções disponíveis.
A notação por pontos permite que você atualize um único campo aninhado sem substituir
outro campo aninhado. Se você atualizar um campo aninhado sem a notação por pontos,
todo o campo mapa será substituído, por exemplo:
Web
( )
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 6/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
}
}).then(function() {
console.log("Frank food updated");
});
/*
Ending State, favorite.color and favorite.subject are no longer present:
/users
/frank
{
name: "Frank",
favorites: {
food: "Ice Cream",
},
age: 12
}
*/
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 7/8
14/07/2020 Adicionar dados ao Cloud Firestore | Firebase
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0 8/8
14/07/2020 Transações e gravações em lote | Firebase
O Cloud Firestore é compatível com operações atômicas para leitura e gravação de dados.
Em um conjunto de operações atômicas, todas as operações são bem-sucedidas ou
nenhuma delas é aplicada. Há dois tipos de operações atômicas no Cloud Firestore:
É possível agrupar várias operações em uma única transação, basta usar as bibliotecas de
cliente do Cloud Firestore. As transações são úteis quando você quer atualizar o valor de
um campo com base no valor atual dele ou de algum outro.
Uma transação consiste em qualquer número de operações get() seguidas por qualquer
número de operações de gravação, como set(), update() ou delete(). No caso de uma
edição simultânea, o Cloud Firestore executa a transação inteira novamente. Por exemplo,
se uma transação lê documentos e outro cliente modi ca qualquer um desses
documentos, o Cloud Firestore tentará a transação novamente. Esse recurso garante que a
transação funcione com dados atualizados e consistentes.
As gravações nunca são aplicadas parcialmente pelas transações. Todas as gravações são
executadas no nal de uma transação bem-sucedida.
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 1/7
14/07/2020 Transações e gravações em lote | Firebase
uma função que chama uma transação (função de transação) pode ser executada
mais de uma vez se uma edição simultânea afetar um documento lido pela
transação;
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
// Initialize document
let cityRef = db.collection('cities').doc('SF');
let setCity = cityRef.set({
name: 'San Francisco',
state: 'CA',
country: 'USA',
capital: false,
population: 860000
});
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 2/7
14/07/2020 Transações e gravações em lote | Firebase
Não modi que o estado do aplicativo dentro de suas funções de transação. Isso resultará
em problemas de simultaneidade, porque as funções de transação podem ser executadas
várias vezes e não têm garantia de execução na thread de IU. Em vez disso, transmita as
informações que você precisa para fora de suas funções de transação. O exemplo a seguir
baseia-se no exemplo anterior para mostrar como transmitir informações de uma
transação:
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
Falha na transação
A transação leu um documento que foi modi cado fora da transação. Nesse caso, a
transação é executada novamente de maneira automática. As novas tentativas da
transação ocorrem em um número nito de vezes.
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 3/7
14/07/2020 Transações e gravações em lote | Firebase
Em uma transação com falha, um erro é retornado e nada é gravado no banco de dados.
Você não precisa reverter a transação, isso é feito automaticamente pelo Cloud Firestore.
Gravações em lote
Se você não precisar ler documentos no conjunto de operações, poderá executar várias
operações de gravação como um único lote contendo qualquer combinação de operações
set(), update() ou delete(). Um lote de gravações é concluído atomicamente e pode
gravar em vários documentos. No exemplo a seguir, você descobre como criar e con rmar
um lote de gravação:
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
Uma gravação em lote pode conter até 500 operações. Cada uma dessas operações é
contabilizada separadamente no uso do Cloud Firestore. Em uma operação de gravação,
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 4/7
14/07/2020 Transações e gravações em lote | Firebase
vação: para entrada de dados em massa, use uma biblioteca cliente do servidor
:// rebase.google.com/docs/ restore/client/libraries?authuser=0#server_client_libraries) com gravações
uais em paralelo. As gravações em lote apresentam melhor desempenho do que aquelas em série, mas n
r do que as executadas em paralelo. Use uma biblioteca de cliente do servidor para operações de dados e
a e não um SDK da Web/para dispositivos móveis.
Por exemplo, imagine que o banco de dados do exemplo cities também contenha uma
coleção countries. Cada documento country usa um campo last_updated para
acompanhar a última vez em houve atualização de qualquer cidade relacionada a esse
país. As seguintes regras de segurança a seguir exigem que uma atualização de um
documento city também atualize atomicamente o campo last_updated do país
relacionado:
ice cloud.firestore {
tch /databases/{database}/documents {
// If you update a city doc, you must also
// update the related country's last_updated field.
match /cities/{city} {
allow write: if request.auth.uid != null &&
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 5/7
14/07/2020 Transações e gravações em lote | Firebase
getAfter(
/databases/$(database)/documents/countries/$(request.resource.data.count
).data.last_updated == request.time;
}
match /countries/{country} {
allow write: if request.auth.uid != null;
}
ice cloud.firestore {
tch /databases/{db}/documents {
function prefix() {
return /databases/{db}/documents;
}
match /chatroom/{roomId} {
allow read, write: if roomId in get(/$(prefix())/users/$(request.auth.uid)).
|| exists(/$(prefix())/admins/$(request.auth.uid));
}
match /users/{userId} {
allow read, write: if userId == request.auth.uid
|| exists(/$(prefix())/admins/$(request.auth.uid));
}
match /admins/{userId} {
allow read, write: if exists(/$(prefix())/admins/$(request.auth.uid));
}
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 6/7
14/07/2020 Transações e gravações em lote | Firebase
document access call used. The maximum total allowed for this call
s 10, because it is a single document request.
ollection('chatroom').doc('mygroup').get(...);
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/manage-data/transactions?authuser=0 7/7
14/07/2020 Excluir dados do Cloud Firestore | Firebase
Excluir documentos
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Se quiser excluir um documento e todos os que estão contidos nas subcoleções dele, você
precisará fazer isso manualmente. Para mais informações, consulte Excluir coleções
(#collections).
Excluir campos
https://firebase.google.com/docs/firestore/manage-data/delete-data?authuser=0 1/4
14/07/2020 Excluir dados do Cloud Firestore | Firebase
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Android Android
Java (#java)Python
Excluir coleções
Para excluir uma coleção ou subcoleção completa no Cloud Firestore, recupere todos os
documentos dentro da coleção ou subcoleção e os exclua. Se você tem coleções maiores,
exclua os documentos em lotes menores para evitar erros de falta de memória. Repita o
processo até excluir toda a coleção ou subcoleção.
Os snippets abaixo estão simpli cados e não incluem processamento de erros, segurança,
exclusão de subcoleções ou aumento de desempenho. Para saber mais sobre uma
abordagem recomendada para excluir coleções em produção, consulte Como excluir
coleções e subcoleções
(https:// rebase.google.com/docs/ restore/solutions/delete-collections?authuser=0).
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/manage-data/delete-data?authuser=0 2/4
14/07/2020 Excluir dados do Cloud Firestore | Firebase
https://firebase.google.com/docs/firestore/manage-data/delete-data?authuser=0 3/4
14/07/2020 Excluir dados do Cloud Firestore | Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/manage-data/delete-data?authuser=0 4/4
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Veja nesta página os dois tipos de índice usados pelo Cloud Firestore: índices de campo
único (#single- eld_indexes) e compostos (#composite_indexes).
Caso não haja um índice em uma consulta, a maioria dos bancos de dados rastreará o
conteúdo item por item, um processo demorado que ca ainda mais lento à medida que o
banco de dados cresce. O Cloud Firestore garante alto desempenho de consulta usando
índices em todas as consultas. Como resultado, o desempenho da consulta depende do
tamanho do conjunto de resultados e não do número de itens inclusos no banco de dados.
O Cloud Firestore inclui recursos que reduzem o tempo necessário para gerenciar os
índices. Os índices necessários para as consultas mais básicas são criados
automaticamente. À medida que você usa e testa seu app, o Cloud Firestore ajuda a
identi car e criar outros índices
(https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0) que sejam
necessários para ele.
Tipos de índice
O Cloud Firestore usa dois tipos de índices, de campo único e compostos. O número de
campos indexados não é a única diferença entre esses índices, o gerenciamento deles
também é diferente.
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 1/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Indexação automática
Por padrão, o Cloud Firestore mantém automaticamente os índices de campo único para
cada campo em um documento e cada subcampo em um mapa. O Cloud Firestore usa as
seguintes con gurações padrão para índices de campo único:
Para cada campo que não seja de matriz ou de mapa, o Cloud Firestore de ne dois
índices de campo único do escopo da coleção, um em modo crescente e o outro em
modo decrescente.
Para cada campo de mapa, o Cloud Firestore cria um índice crescente do escopo da
coleção e um índice decrescente para cada subcampo no mapa que não seja de
matriz ou de mapa.
Índices de campo único com escopo de grupo de coleções não são mantidos por
padrão.
Se você criar uma isenção para um índice de campo único no campo do mapa, os
subcampos do mapa herdarão essas con gurações. No entanto, é possível de nir as
isenções para um índice de campo único em subcampos especí cos. Se você excluir a
isenção de um subcampo, ele herdará as con gurações de isenção do campo pai. Se essas
con gurações não existirem, ele herdará as con gurações gerais do banco de dados.
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 2/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
vação: uma isenção se aplica somente às con gurações de índice automático. Um campo isento da index
mpo único ainda pode ser indexado como parte de um índice composto.
Para criar e gerenciar isenções de índice de campo único, consulte Como gerenciar índices
no Cloud Firestore
(https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0#exemptions).
Índices compostos
O Cloud Firestore usa índices compostos para oferecer suporte às consultas que ainda não
aceitam índices de campo único.
O Cloud Firestore não cria índices compostos automaticamente, como faria para os índices
de campo único, devido ao grande número de combinações de campos possíveis. Em vez
disso, ele ajuda a identi car e criar os índices compostos necessários
(https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0) à medida que você
cria seu app.
Se você zer a consulta acima sem antes criar o índice necessário, o Cloud Firestore
retornará uma mensagem de erro com um link que pode ser acessado para criar o índice
ausente. Isso acontecerá sempre que você zer uma consulta que não for compatível com
um índice. Também é possível criar e gerenciar índices compostos manualmente usando o
console ou a Firebase CLI (// rebase.google.com/docs/cli?authuser=0). Para mais informações
sobre esses processos, consulte Como gerenciar índices
(https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0).
A con guração de índices compostos e de campo único é feita de maneira diferente, mas
ambos exigem que você con gure modos de índice e escopos de consulta para seus
índices.
Modos de índice
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 3/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Ao de nir um índice, você seleciona um modo de índice para cada campo indexado. O
modo de índice de cada campo é compatível com cláusulas de consulta especí cas nesse
campo. É possível selecionar os seguintes modos de índice:
Modo de
Descrição
índice
Crescente Compatível com cláusulas de consulta <, <=, ==, >= e > no campo e com a classi cação
Decrescente Compatível com cláusulas de consulta <, <=, ==, >= e > no campo e com a classi cação
Escopos da consulta
Cada índice tem um escopo delimitado a uma coleção ou a um grupo de coleções. Isso é
conhecido como o escopo da consulta do índice:
Escopo da coleção
O Cloud Firestore cria índices com um escopo de coleção por padrão. Esses índices
são compatíveis com consultas que retornam resultados de uma única coleção.
Um grupo de coleções inclui todas as coleções com o mesmo código. Para executar
uma consulta do grupo de coleções
(https:// rebase.google.com/docs/ restore/query-data/queries?authuser=0#collection-group-
query)
que retorne resultados ltrados ou ordenados a partir de um grupo, você precisa criar
um índice correspondente com o escopo do grupo de coleções.
Exemplo de indexação
Ao criar índices de campo único automaticamente para você, o Cloud Firestore permite que
seu aplicativo dê suporte rapidamente às consultas mais básicas no banco de dados. Com
os índices de campo único, é possível realizar consultas simples com base nos valores de
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 4/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
campo e nos comparadores <, <=, ==, >= e >. Para campos de matriz, eles permitem que
você execute consultas array_contains.
Site
( )
citiesRef.doc("SF").set({
name: "San Francisco", state: "CA", country: "USA",
capital: false, population: 860000,
regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
name: "Los Angeles", state: "CA", country: "USA",
capital: false, population: 3900000,
regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
name: "Washington, D.C.", state: null, country: "USA",
capital: true, population: 680000,
regions: ["east_coast"] });
citiesRef.doc("TOK").set({
name: "Tokyo", state: null, country: "Japan",
capital: true, population: 9000000,
regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
name: "Beijing", state: null, country: "China",
capital: true, population: 21500000,
regions: ["jingjinji", "hebei"] });
test.firestore.js (https://github.com/ rebase/snippets-web/blob/690e78f3464926289034441e24
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 5/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
cidades
estado Coleção
cidades
país Coleção
cidades
capital Coleção
cidades
população Coleção
cidades
estado Coleção
cidades
país Coleção
cidades
capital Coleção
cidades
população Coleção
Site
( )
Site
( )
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 6/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Você também pode criar consultas compostas com base em igualdades (==):
Site
( )
Se você precisar executar uma consulta composta que usa uma comparação de intervalo
(<, <=, > ou >=) ou classi car por um campo diferente, crie um índice composto
(#composite_indexes) para essa consulta.
O Cloud Firestore usa índices compostos para oferecer suporte a consultas compostas
que ainda não aceitam índices de campo único. Por exemplo, você precisaria de um índice
composto para as seguintes consultas:
Site
( )
Essas consultas exigem o índice composto abaixo. Como a consulta usa uma igualdade
para o campo country, o modo de índice dele pode ser decrescente ou crescente. Por
padrão, as consultas de desigualdade aplicarão uma ordem de classi cação crescente
com base no campo da cláusula de desigualdade.
cidades
(ou ) país, população Coleção
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 7/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Se você quiser executar as mesmas consultas, mas com uma ordem de classi cação
decrescente, será necessário um índice composto na direção decrescente para
population:
Site
( )
cidades
país, população Coleção
cidades
país, população Coleção
Também será necessário criar um índice composto se você quiser combinar uma consulta
array_contains com cláusulas adicionais.
Site
( )
Para demonstrar um índice com escopo de grupo de coleções, adicione uma subcoleção
landmarks a alguns dos documentos city:
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 8/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Site
( )
citiesRef.doc("SF").collection("landmarks").doc().set({
name: "Golden Gate Bridge",
category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
name: "Golden Gate Park",
category : "park" });
citiesRef.doc("DC").collection("landmarks").doc().set({
name: "National Gallery of Art",
category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
name: "National Mall",
category : "park" });
Ao usar o seguinte índice de campo único com escopo do conjunto, é possível consultar
pontos de referência park em uma única cidade:
pontos de referência
(ou ) categoria Coleção
Site
( )
Agora, imagine que você tem interesse em pontos de referência park em todas as cidades.
Para executar essa consulta no grupo que consiste em todos os conjuntos landmarks,
você precisa ativar um índice de campo único landmarks com escopo do grupo de
conjuntos:
pontos de referência
(ou ) categoria Grupo de coleção
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 9/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Site
( )
Para executar uma consulta de grupo de coleções que retorne resultados ltrados ou
ordenados, é necessário ativar um índice correspondente composto ou de campo único
com o escopo do grupo de coleções. No entanto, as consultas de grupo de coleções que
não ltram ou ordenam os resultados não exigem de nições de índice adicionais.
Por exemplo, é possível executar a seguinte consulta de grupo de coleções sem ativar um
índice adicional:
Site
( )
db.collectionGroup("landmarks").get()
Índices e preços
Embora o Cloud Firestore use um índice para cada consulta, ele não exige necessariamente
um índice por consulta. Para consultas com múltiplas cláusulas de igualdade (==) e,
opcionalmente, uma cláusula orderBy, o Cloud Firestore pode reutilizar índices existentes.
O Cloud Firestore pode mesclar os índices de ltros de igualdade simples para criar os
índices compostos necessários a consultas de igualdade maiores.
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 10/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
restaurants
burgerthyme
name : "Burger Thyme"
category : "burgers"
city : "San Francisco"
editors_pick : true
star_rating : 4
Agora imagine que esse app use consultas como as mostradas abaixo. Observe que ele
usa combinações de cláusulas de igualdade para category, city e editors_pick
enquanto sempre classi ca por crescente star_rating:
Site
( )
restaurants
categoria, avaliação com estrelas Coleção
restaurants
cidade, avaliação com estrelas Coleção
restaurants
categoria, cidade, avaliação com estrelas Coleção
restaurants
categoria, cidade, sugestões dos editores, avaliação com estrelas Coleção
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 11/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
restaurants
categoria, avaliação com estrelas Coleção
restaurants
cidade, avaliação com estrelas Coleção
restaurants
sugestões dos editores, avaliação com estrelas Coleção
Site
( )
Limites de indexação
Os limites a seguir são aplicáveis aos índices. Para mais informações sobre cotas e limites,
consulte Cotas e limites (https:// rebase.google.com/docs/ restore/quotas?authuser=0).
Limite Detalhes
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 12/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Limite Detalhes
Para a maioria dos aplicativos, você pode con ar na indexação automática e nos links de
mensagens de erro para gerenciar seus índices. No entanto, você pode querer adicionar
isenções de campo único nos seguintes casos:
Caso Descrição
Campos de string Se você tiver um campo de string que geralmente armazena valores de string
grandes longos que você não usa para consulta, é possível reduzir os custos de
armazenamento com a isenção da indexação no campo.
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 13/14
14/07/2020 Tipos de índices no Cloud Firestore | Firebase
Caso Descrição
Taxas de gravação Se você indexar um campo que aumenta ou diminui sequencialmente entre
altas em uma documentos em uma coleção, como um carimbo de data/hora, a taxa máxima de
coleção que contém gravação para a coleção será de 500 gravações por segundo. Se você não zer
documentos com consultas com base no campo com valores sequenciais, poderá isentar o campo
valores sequenciais da indexação para ignorar esse limite.
Em um caso de uso de Internet das Coisas (IoT, na sigla em inglês) com uma alta
taxa de gravação, por exemplo, uma coleção que contém documentos com um
campo de carimbo de data/hora pode se aproximar do limite de 500 gravações por
segundo.
Campos grandes de Campos grandes de matriz ou de mapa podem se aproximar do limite de 20.000
matriz ou de mapa entradas de índice por documento. Se você não estiver fazendo consultas com
base em um campo grande de matriz ou de mapa, recomendamos isentá-lo da
indexação.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/query-data/index-overview?authuser=0 14/14
14/07/2020 Ordenar e limitar dados com o Cloud Firestore | Firebase
vação: as amostras de código abrangem várias linguagens, entretanto, no texto explicativo, são feitas
ncias aos nomes de métodos da Web.
Por padrão, uma consulta recupera todos os documentos que atendem a ela em ordem
crescente por ID. Use orderBy() para especi car a ordem de classi cação dos dados e
limit()para limitar o número de documentos recuperados.
vação: uma cláusula orderBy() também ltra a existência do campo especi cado. O conjunto de resulta
cluirá documentos que não contenham o campo especi cado.
Por exemplo, para consultar as três primeiras cidades em ordem alfabética, use:
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/order-limit-data?authuser=0 1/3
14/07/2020 Ordenar e limitar dados com o Cloud Firestore | Firebase
Também é possível ordenar por vários campos. Por exemplo, se você quiser ordenar por
estado e, em cada ordenação por estado, ordenar por população em ordem decrescente:
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
No entanto, se você tiver um ltro com uma comparação de intervalo (<, <=, >, >=), será
preciso que sua primeira ordenação esteja no mesmo campo:
Java Kotlin
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)Pytho
Android Android
( )( )
Java Kotlin
https://firebase.google.com/docs/firestore/query-data/order-limit-data?authuser=0 2/3
14/07/2020 Ordenar e limitar dados com o Cloud Firestore | Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/query-data/order-limit-data?authuser=0 3/3
14/07/2020 Paginar dados com cursores de consulta | Firebase
Com os cursores de consulta no Cloud Firestore, é possível dividir os dados retornados por
uma consulta em lotes de acordo com os parâmetros de nidos.
Os cursores de consulta de nem os pontos inicial e nal de uma consulta, permitindo que
você:
No entanto, para de nir um intervalo especí co de uma consulta, use o método where(),
descrito em Consultas simples
(https:// rebase.google.com/docs/ restore/query-data/queries?authuser=0#simple_queries).
Use os métodos startAt() ou startAfter() para de nir o ponto inicial de uma consulta.
O método startAt() inclui o ponto inicial e o método startAfter() o exclui.
Por exemplo, se você usar startAt(A) em uma consulta, será retornado todo o alfabeto.
Mas se você usar startAfter(A), será retornado B-Z.
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/query-cursors?authuser=0 1/4
14/07/2020 Paginar dados com cursores de consulta | Firebase
Da mesma forma, use os métodos endAt() ou endBefore() para de nir um ponto nal
para os resultados da consulta.
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Você também pode transferir um snapshot de documento para a cláusula do cursor como
o ponto inicial ou nal do cursor de consulta. Os valores no snapshot do documento
servem como valores no cursor de consulta.
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
await startAtSnapshot.limit(10).get();
index.js (https://github.com/ rebase/snippets-node/blob/26a796e67296ead6921f7c978cf731edaacb
https://firebase.google.com/docs/firestore/query-data/query-cursors?authuser=0 2/4
14/07/2020 Paginar dados com cursores de consulta | Firebase
Pagine consultas combinando cursores de consulta com o método limit(). Por exemplo,
use o último documento em um lote como o início de um cursor para o próximo lote.
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Por exemplo, em um conjunto de dados contendo todas as cidades chamadas "Spring eld"
nos Estados Unidos, haveria vários pontos de partida para um conjunto de consultas
https://firebase.google.com/docs/firestore/query-data/query-cursors?authuser=0 3/4
14/07/2020 Paginar dados com cursores de consulta | Firebase
Cidades
Nome Estado
Para começar em uma Spring eld especí ca, você pode adicionar o estado como uma
condição secundária na sua cláusula de cursor.
Java Kotlin+KTX
Web (#web)Swi (#swift)Objective-C (#objective-c) Java (#java)P
Android Android
( )( )
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/query-data/query-cursors?authuser=0 4/4
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
vação: as amostras de código abrangem várias linguagens, entretanto, no texto explicativo, são feitas
ncias aos nomes de métodos da Web.
Dados de exemplo
Para começar, escreva alguns dados sobre cidades para demonstrarmos diversas formas
de leitura:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 1/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
Consultas simples
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 2/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
Depois de criar um objeto de consulta, use a função get() para recuperar os resultados:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
index.js (https://github.com/ rebase/snippets-node/blob/d769695bd1159103e7c877849ccaccab3db
Operadores de consulta
O método where() usa três parâmetros: um campo para ltrar, uma operação de
comparação e um valor. A comparação pode ser <, <=, ==, >, >= ou array-contains. Para
iOS, Android e Java, o operador de comparação é nomeado explicitamente no método.
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 3/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
Associação de matriz
Use o operador array-contains para ltrar com base nos valores da matriz. Exemplo:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Essa consulta retorna todos os documentos city em que o campo regions é uma matriz
contendo west_coast. Se você consultar um valor que tiver várias instâncias na matriz, o
documento será incluído nos resultados apenas uma vez.
Consultas compostas
É possível encadear vários métodos where() para criar consultas mais especí cas (lógica
AND). No entanto, para combinar o operador de igualdade (==) com uma cláusula range ou
array-contains (<, <=, >, >= ou array-contains), não se esqueça de criar um índice
composto (https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0).
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 4/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
Só podem ser feitas comparações de intervalo (<, <=, >, >=) em um campo único e incluir
no máximo uma cláusula array-contains em uma consulta composta:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Um grupo de coleções é composto de todos os conjuntos com o mesmo ID. Por padrão,
por meio das consultas são recuperados resultados de uma única coleção no seu banco de
dados. Use uma consulta do grupo de coleções para recuperar documentos de um grupo
em vez de uma única coleção.
Por exemplo, é possível criar um grupo de coleções de landmarks com a adição de uma
subcoleção de pontos de referência a cada cidade:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 5/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
type: 'bridge'
}),
citiesRef.doc('SF').collection('landmarks').doc().set({
name: 'Legion of Honor',
type: 'museum'
}),
citiesRef.doc('LA').collection('landmarks').doc().set({
name: 'Griffith Park',
type: 'park'
}),
citiesRef.doc('LA').collection('landmarks').doc().set({
name: 'The Getty',
type: 'museum'
}),
citiesRef.doc('DC').collection('landmarks').doc().set({
name: 'Lincoln Memorial',
type: 'memorial'
}),
citiesRef.doc('DC').collection('landmarks').doc().set({
name: 'National Air and Space Museum',
type: 'museum'
}),
citiesRef.doc('TOK').collection('landmarks').doc().set({
name: 'Ueno Park',
type: 'park'
}),
citiesRef.doc('TOK').collection('landmarks').doc().set({
name: 'National Museum of Nature and Science',
type: 'museum'
}),
citiesRef.doc('BJ').collection('landmarks').doc().set({
name: 'Jingshan Park',
type: 'park'
}),
citiesRef.doc('BJ').collection('landmarks').doc().set({
name: 'Beijing Ancient Observatory',
type: 'museum'
})
]);
index.js (https://github.com/ rebase/snippets-node/blob/d769695bd1159103e7c877849ccaccab3db
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 6/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Antes de usar uma consulta do grupo de coleções, é preciso criar um índice compatível
com ela. Faça isso por meio de uma mensagem de erro, do console ou da Firebase CLI
(https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0).
No caso de SDKs da Web e para dispositivos móveis, você também precisa criar regras que
permitam consultas do grupo de coleções
(https:// rebase.google.com/docs/ restore/security/rules-query?
authuser=0#secure_and_query_documents_based_on_collection_groups)
.
Limitações de consulta
Consultas com operador lógico OR. Nesse caso, crie uma consulta separada para
cada condição OR e mescle os resultados da consulta no seu app.
Consultas com uma cláusula !=. Nesse caso, divida a consulta em duas: uma do tipo
“maior que” e outra do tipo “menor que”. Por exemplo, a cláusula de consulta
where("age", "!=", "30") não é aceita, mas é possível conseguir o mesmo
conjunto de resultados combinando duas consultas, uma com a cláusula
where("age", "<", "30") e outra com a cláusula where("age", ">", 30).
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 7/8
14/07/2020 Executar consultas simples e compostas no Cloud Firestore | Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 8/8
14/07/2020 Locais do Cloud Firestore | Firebase
Saiba que o local padrão dos recursos do GCP pode ter sido de nido anteriormente durante
a criação do projeto ou quando outro serviço que precisa dessa con guração foi ajustado
(veja abaixo).
tante: o local padrão dos recursos do GCP é usado em serviços da plataforma no projeto que exigem uma
uração de local, especi camente, no intervalo padrão do Cloud Storage e no aplicativo do App Engine, que
sário se você usa o Cloud Scheduler.
Vários serviços disponíveis para o aplicativo exigem uma con guração especí ca que é o
local padrão dos recursos do Google Cloud Platform (GCP) no seu projeto. Esse local é onde
seus dados são armazenados para serem usados por serviços do GCP que exigem essa
con guração.
de nir o local para um dos seguintes serviços também de ne o local dos outros. Depois de de nir o loca
ossível alterá-lo.
Cloud Firestore
Observe que o local padrão do recurso do GCPnão se aplica ao Firebase Realtime
Database (https:// rebase.google.com/docs/database/?authuser=0).
Cloud Storage
Observe que o local padrão do recurso do GCP só se aplica ao intervalo padrão do
Cloud Storage (https:// rebase.google.com/docs/storage?authuser=0). Se você estiver no
plano Blaze, poderá criar vários intervalos, cada um com seu próprio local
(//cloud.google.com/storage/docs/bucket-locations?authuser=0).
https://firebase.google.com/docs/firestore/locations?authuser=0 1/5
14/07/2020 Locais do Cloud Firestore | Firebase
Tipos de locais
É possível armazenar seus dados do Cloud Firestore em um local com várias regiões
(#location-mr) ou em um local regional (#location-r).
Se você já tiver um aplicativo do App Engine com uma localização que seja us-central ou
europe-west, seu banco de dados do Cloud Firestore será considerado multirregional
(#location-mr).
Locais multirregionais
Um local multirregional é uma área geográ ca geral, como os Estados Unidos. Os dados
em um local multirregional são replicados em várias regiões
(https://cloud.google.com/docs/geography-and-regions?authuser=0#regions_and_zones). Em uma
região, os dados são replicados nas zonas
(https://cloud.google.com/docs/geography-and-regions?authuser=0#regions_and_zones).
Locais regionais
https://firebase.google.com/docs/firestore/locations?authuser=0 2/5
14/07/2020 Locais do Cloud Firestore | Firebase
Um local regional é um lugar geográ co especí co, como a Carolina do Sul. Os dados em
um local regional são replicados em várias zonas em uma região
(https://cloud.google.com/docs/geography-and-regions?authuser=0#regional_resources). A distância
entre todos os locais regionais é de pelo menos 160 quilômetros.
América do Norte
northamerica-northeast1 Montreal
América do Sul
Europa
europe-west2 Londres
europe-west3 Frankfurt
europe-west6 Zurique
Ásia
asia-south1 Mumbai
asia-northeast1 Tóquio
asia-northeast2 Osaka
Austrália
australia-southeast1 Sydney
https://firebase.google.com/docs/firestore/locations?authuser=0 3/5
14/07/2020 Locais do Cloud Firestore | Firebase
Preços do local
Seu local do Cloud Firestore determina o custo das operações do banco de dados.
Para uma explicação detalhada sobre os preços por região e por tipo de região, consulte a
página Noções básicas do faturamento do Cloud Firestore
(https:// rebase.google.com/docs/ restore/pricing?authuser=0).
Próximas etapas
Para criar um banco de dados do Cloud Firestore em um local especí co, consulte
Primeiros passos com o Cloud Firestore
(https:// rebase.google.com/docs/ restore/quickstart?authuser=0).
Para mais informações sobre como criar aplicativos para atender às suas
necessidades de latência, disponibilidade e durabilidade, consulte a página Geogra a
e regiões
(https://cloud.google.com/docs/geography-and-regions?authuser=0#multi-regional_resources).
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
https://firebase.google.com/docs/firestore/locations?authuser=0 4/5
14/07/2020 Locais do Cloud Firestore | Firebase
https://firebase.google.com/docs/firestore/locations?authuser=0 5/5
14/07/2020 Gerenciar o Cloud Firestore com o Console do Firebase
Gerenciar índices.
Monitorar o uso.
Ver dados
É possível ver todos os dados do Cloud Firestore no Console do Firebase. Na guia Dados
(https://console. rebase.google.com/project/_/database/ restore/data?authuser=0) do Cloud
Firestore, clique em um documento ou coleção para abrir os dados aninhados nesse item.
Para abrir um documento ou coleção em um caminho especí co, use o botão Editar
caminho :
Para ltrar os documentos listados em uma coleção, use o botão Filtrar lista :
https://firebase.google.com/docs/firestore/using-console?authuser=0 1/6
14/07/2020 Gerenciar o Cloud Firestore com o Console do Firebase
https://firebase.google.com/docs/firestore/using-console?authuser=0 2/6
14/07/2020 Gerenciar o Cloud Firestore com o Console do Firebase
os documentos ancestrais inexistentes são exibidos no console, mas eles não aparecem em consultas e
tâneos. Você precisa criar o documento para incluí-lo nos resultados da consulta.
Gerenciar dados
No Cloud Firestore, você armazena dados em documentos que podem ser organizados em
coleções. Antes de começar a adicionar dados, saiba mais sobre o modelo de dados do
Cloud Firestore (https:// rebase.google.com/docs/ restore/data-model?authuser=0).
vação: as operações realizadas no console são contabilizadas como uso do Cloud Firestore.
Adicionar dados
https://firebase.google.com/docs/firestore/using-console?authuser=0 3/6
14/07/2020 Gerenciar o Cloud Firestore com o Console do Firebase
Editar dados
2. Clique em um campo para editar o valor dele. Para adicionar campos ou subcoleções
ao documento selecionado, clique em Adicionar campo ou Adicionar coleção.
Excluir dados
https://firebase.google.com/docs/firestore/using-console?authuser=0 4/6
14/07/2020 Gerenciar o Cloud Firestore com o Console do Firebase
Para adicionar, editar e excluir regras de segurança no Cloud Firestore por meio do Console
do Firebase, acesse a guia Regras
(https://console. rebase.google.com/project/_/database/ restore/rules?authuser=0) na seção
Banco de dados. Saiba mais sobre como con gurar e personalizar regras
(https:// rebase.google.com/docs/ restore/security/get-started?authuser=0).
Gerenciar índices
Para criar novos índices para suas consultas e gerenciar índices atuais usando o Console
do Firebase, acesse a guia Índices
(https://console. rebase.google.com/project/_/database/ restore/indexes?authuser=0) na seção
Banco de dados. Saiba mais sobre como gerenciar índices
(https:// rebase.google.com/docs/ restore/query-data/indexing?authuser=0).
Monitorar o uso
https://firebase.google.com/docs/firestore/using-console?authuser=0 5/6
14/07/2020 Gerenciar o Cloud Firestore com o Console do Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/using-console?authuser=0 6/6
14/07/2020 Tipos de dados compatíveis | Firebase
Tipos de dados
A tabela a seguir lista os tipos de dados com suporte no Cloud Firestore. Também
descreve a ordem de classi cação usada ao comparar valores do mesmo tipo:
Tipo de Ordem de
Observações
dados classi cação
Matriz Por valores de Uma matriz não pode conter outro valor de matriz como um de seus
elemento elementos.
Por exemplo, [1, 2, 3] < [1, 2, 3, 1] < [2]. A matriz [2] tem o
maior valor no primeiro elemento. A matriz [1, 2, 3] tem elementos
iguais aos primeiros três elementos de [1, 2, 3, 1], mas é menor em
comprimento.
Bytes Ordem de bytes Até 1.048.487 bytes (1 MiB — 89 bytes). Somente os primeiros 1.500 bytes
são considerados nas consultas.
Data e Cronológica Quando armazenados no Cloud Firestore, têm precisão somente para
hora microssegundos. Qualquer precisão adicional é arredondada para baixo.
https://firebase.google.com/docs/firestore/manage-data/data-types?authuser=0 1/3
14/07/2020 Tipos de dados compatíveis | Firebase
Tipo de Ordem de
Observações
dados classi cação
Os campos do mapa são classi cados por chave e comparados por pares
de chave-valor, primeiro comparando as chaves e, em seguida, os valores. Se
os primeiros pares de chave-valor forem iguais, os próximos pares serão
comparados e assim por diante. Se dois mapas começarem com os
mesmos pares de chave-valor, o tamanho do mapa será considerado. Por
exemplo, os mapas a seguir estão em ordem crescente:
Nulo Nenhuma —
String de Ordem de bytes Até 1.048.487 bytes (1 MiB — 89 bytes). Somente os primeiros 1.500 bytes
texto codi cada em da representação UTF-8 são considerados nas consultas.
UTF-8
Quando uma consulta envolve um campo com valores de tipos mistos, o Cloud Firestore
usa uma ordem determinista baseada nas representações internas. A lista a seguir mostra
a ordem:
https://firebase.google.com/docs/firestore/manage-data/data-types?authuser=0 2/3
14/07/2020 Tipos de dados compatíveis | Firebase
1. Valores nulos
2. Valores booleanos
4. Valores de data
6. Valores de byte
9. Valores de matriz
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/manage-data/data-types?authuser=0 3/3
14/07/2020 Receber atualizações em tempo real com o Cloud Firestore | Firebase
vação:os listeners em tempo real não são compatíveis com a biblioteca de cliente PHP.
Java
Site (#site)Swi (#swift)
Android
Node.js (#)Mais
( ) ( )
https://firebase.google.com/docs/firestore/query-data/listen?authuser=0 1/6
14/07/2020 Receber atualizações em tempo real com o Cloud Firestore | Firebase
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
Por padrão, os listeners não são noti cados sobre alterações que afetam apenas
metadados. Pense no que acontece quando seu aplicativo grava um novo documento:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
vação: se você quiser apenas saber quando sua gravação foi concluída, poderá ouvir o retorno de chamad
usão em vez de usar hasPendingWrites. Em JavaScript, use o Promise retornado da operação de gravaçã
anexar um retorno de chamada .then(). No Swift, trans ra um retorno de chamada de conclusão para su
o de gravação.
https://firebase.google.com/docs/firestore/query-data/listen?authuser=0 2/6
14/07/2020 Receber atualizações em tempo real com o Cloud Firestore | Firebase
Assim como nos documentos, é possível usar onSnapshot() em vez de get() para
detectar os resultados de uma consulta. Isso cria um snapshot da consulta. Por exemplo,
para detectar os documentos com o estado CA:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
tante: conforme explicado acima em Eventos para alterações locais (#events-local-changes), você recebe
os imediatamente para suas gravações locais. Seu listener pode usar o campo metadata.hasPendingWri
da documento para determinar se o documento tem alterações locais que ainda não foram gravadas no b
Muitas vezes, é útil ver as alterações reais nos resultados da consulta entre snapshots da
consulta, em vez de simplesmente usar o snapshot inteiro da consulta. Por exemplo, talvez
você queira manter um cache à medida que documentos individuais forem adicionados,
removidos e modi cados.
https://firebase.google.com/docs/firestore/query-data/listen?authuser=0 3/6
14/07/2020 Receber atualizações em tempo real com o Cloud Firestore | Firebase
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Android Android
Java (#java)Python
tante: o primeiro snapshot da consulta contém added eventos para todos os documentos atuais
pondentes à consulta. Isso ocorre porque você está recebendo um conjunto de alterações que atualizam
hot da consulta em relação ao estado inicial dela. Isso permite, por exemplo, que você preencha diretame
das mudanças recebidas no snapshot da primeira consulta, sem precisar adicionar uma lógica especial p
ssar o estado inicial.
Remover um listener
Quando não estiver mais interessado em detectar os seus dados, remova o listener para
que os retornos de chamada do evento parem de ser chamados. Isso permite que o cliente
pare de usar largura de banda para receber atualizações. Exemplo:
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
https://firebase.google.com/docs/firestore/query-data/listen?authuser=0 4/6
14/07/2020 Receber atualizações em tempo real com o Cloud Firestore | Firebase
// ...
Às vezes, uma detecção pode falhar, por exemplo, devido a permissões de segurança ou se
você tentar detectar uma consulta inválida. Saiba mais sobre consultas válidas e inválidas
(https:// rebase.google.com/docs/ restore/query-data/queries?authuser=0#compound_queries). Para
lidar com essas falhas, é possível fornecer um retorno de chamada de erro ao incluir o
listener de snapshots. Após um erro, o listener não receberá mais eventos e não será
necessário removê-lo.
Java Kotlin
Site (#site)Swi (#swift)Objective-C (#objective-c) Java (#java)Python
Android Android
( )( )
db.collection('cities')
.onSnapshot((snapshot) => {
//...
}, (error) => {
//...
});
index.js (https://github.com/ rebase/snippets-node/blob/d769695bd1159103e7c877849ccaccab3db
A seguir
https://firebase.google.com/docs/firestore/query-data/listen?authuser=0 5/6
14/07/2020 Receber atualizações em tempo real com o Cloud Firestore | Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies?authuser=0). Java is a registered trademark of Oracle
and/or its a liates.
https://firebase.google.com/docs/firestore/query-data/listen?authuser=0 6/6
18/07/2020 Chamar funções via solicitações HTTP | Firebase
Os exemplos desta página foram criados com base em uma função de amostra
(https://github.com/ rebase/functions-samples/tree/master/quickstarts/time-server) (em inglês)
que é acionada quando você envia uma solicitação HTTP GET para o ponto de extremidade
das funções. A função de amostra recupera a hora atual do servidor, formata a hora
conforme especi cado em um parâmetro de consulta de URL e envia o resultado na
resposta HTTP.
tante: todas as funções HTTP precisam ser encerradas corretamente. Ao encerrar as funções corretamen
pode evitar cargas excessivas de funções que funcionam por muito tempo. Encerre funções HTTP com
edirect(), res.send() ou res.end().
https://firebase.google.com/docs/functions/http-events 1/6
18/07/2020 Chamar funções via solicitações HTTP | Firebase
t express = require('express');
t cors = require('cors');
t app = express();
Depois de implantar uma função HTTP, você pode invocá-la por meio do URL exclusivo
dela. O URL inclui as informações abaixo na ordem mostrada:
A região (ou regiões) em que você implantou sua função Algumas funções de
produção podem precisar de nir explicitamente o local (/docs/functions/locations) para
minimizar a latência da rede
cloudfunctions.net
https://firebase.google.com/docs/functions/http-events 2/6
18/07/2020 Chamar funções via solicitações HTTP | Firebase
s://us-central1-<project-id>.cloudfunctions.net/date
do: novas funções HTTP e HTTP chamáveis implantadas com qualquer Firebase CLI anterior à versão 7.7
as por padrão e geram erros HTTP 403 quando invocadas. Torne essas funções públicas
ud.google.com/functions/docs/securing/managing-access) explicitamente ou atualize a Firebase CLI
s/cli#setup_update_cli) antes de implantar novas funções.
Se você encontrar erros de permissão ao implantar funções, veri que se os papéis do IAM
(/docs/projects/iam/permissions#functions) apropriados estão atribuídos ao usuário que
executa os comandos de implantação.
s://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Se você invocar funções HTTP protegidas por um rewall ou ltro IP, poderá procurar
(https://cloud.google.com/compute/docs/faq# nd_ip_range) os endereços IP usados pelo Google
para exibir funções HTTP.
https://firebase.google.com/docs/functions/http-events 3/6
18/07/2020 Chamar funções via solicitações HTTP | Firebase
Propriedade/Método Valor
req.method "POST"
req.get('x-myheader') "123"
req.query.foo "baz"
https://firebase.google.com/docs/functions/http-events 4/6
18/07/2020 Chamar funções via solicitações HTTP | Firebase
Propriedade/Método Valor
req.body.text "something"
format = req.query.format;
at = req.body.format;
x.js (https://github.com/ rebase/functions-samples/blob/3ed989ff6c4f6b07c0abd9a5c8ec432cd84d36
Sempre encerre uma função HTTP com send(), redirect() ou end(). Caso contrário, ela
pode continuar a ser executada e interrompida automaticamente pelo sistema. Veja
também Sincronização, dessincronização e promessas (/docs/functions/terminate-functions).
A função date() será concluída depois que o horário do servidor for recuperado e
formatado com o módulo moment (https://www.npmjs.com/package/moment) (em inglês) do
Node.js e quando o resultado na resposta HTTP for enviado.
t formattedDate = moment().format(format);
ole.log('Sending Formatted date:', formattedDate);
status(200).send(formattedDate);
x.js (https://github.com/ rebase/functions-samples/blob/3ed989ff6c4f6b07c0abd9a5c8ec432cd84d36
Você pode conectar uma função HTTP ao Firebase Hosting. As solicitações no seu site do
Firebase Hosting podem ser encaminhadas para funções HTTP especí cas. Isso também
permite que você use seu próprio domínio personalizado com uma função HTTP. Saiba
mais sobre Como conectar o Cloud Functions ao Firebase Hosting (/docs/hosting/functions).
https://firebase.google.com/docs/functions/http-events 5/6
18/07/2020 Chamar funções via solicitações HTTP | Firebase
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0
License (https://creativecommons.org/licenses/by/4.0/), and code samples are licensed under the Apache
2.0 License (https://www.apache.org/licenses/LICENSE-2.0). For details, see the Google Developers Site
Policies (https://developers.google.com/site-policies). Java is a registered trademark of Oracle and/or its
a liates.
https://firebase.google.com/docs/functions/http-events 6/6