Image for post
Image for post

Entre os recursos que a plataforma de serviços Firebase disponibiliza está o Cloud Firestore. Trata-se de um banco de dados NoSQL hospedado nas nuvens onde armazenamos os dados em documentos.

A consulta de dados deste banco é eficiente é flexível, mas há diferenças se você já desenvolve com SQL.

Nesse artigo apresento o FireSql. Uma biblioteca criada com base no SDK oficial do Firebase que permite

consultar coleções no Cloud Firestore usando a sintaxe SQL.

Vamos criar três coleções e alguns documentos para criar consultas sql. Um projeto em Angular 7 foi criado e as funções de exemplos estão todas no componente principal.

No final do artigo colocarei o link do projeto no Github.

Criando as Coleções. Acessando o console do firebase com suas credenciais google e crie um projeto. Para mais detalhes, veja meu artigo.

Vamos criar as coleções para executar as consultas.

Criei 3 coleções nomeando como cidades, estados e pessoas.

Para estados eu criei alguns documentos com os campos nome e sigla.

Para cidades foram 3 campos, nome, uf como string e populacao (sem ~ ç) como number. Também criei alguns documentos.

Finalmente para a coleção pessoas, desenvolvi os seguintes campos:

Indiquei o nome como string, idade como number, tags como array e um map endereco com os campos bairro, numero e rua. Assim como as coleções anteriores, também criei mais documentos para a realização das consultas.

Finalizado a inclusão de valores, o próximo passo é instalar a biblioteca.

Após criar um projeto com o Angular CLI, no terminal do projeto vamos informar:

Assim adicionamos as bibliotecas do Firebase e o FireSql.

No componente principal, vamos iniciar realizando os seguintes imports:

Dessa forma podemos declarar os objetos necessários para a realização das consultas.

Na sequência podemos declarar um objeto que realizará as consultas, definindo também as configurações para conectar no firebase:

No método construtor definimos as configurações do projeto obtidas na página do projeto no Firebase, inicializando o app e instanciando o objeto fireSQL.

A partir deste momento já podemos escrever as consultas.

Vamos começar testando operador WHERE na coleção cidades. O objetivo é apresentar todos os documentos que tem a uf do paraná e a população superior a dez mil.

A função ficou assim:

Utilizamos a sintaxe clássica do SQL utilizando SELEC FROM e ainda usamos um alias para o campo nome.

O método query retorna uma promise pelo qual podemos recuperar no callback o array do resultado.

Realizamos um loop para exibir no console as propriedades cidade, uf e populacao.

Para testar, chamamos a função no método ngOnInit().

O resultado no console:

Podemos utilizar o operador LIKE para campos do tipo string, usando o curinga %.

No console a relação de todos os estados iniciados com a letra P

Podemos definir um conjunto de valores no parâmetro utilizando o IN:

E o resultado:

Cidades de São Paulo e do Paraná.

Uma forma comum de modelar em NoSQL é a utilização de objetos aninhados. Utilizamos essa abordagem na propriedade endereco da pessoa. Para fazer consultas devemos usar as propriedades entre acentos graves:

Definimos uma consulta que retorne todos os registros de pessoas do Centro. Observe que devemos usar as barras invertidas pois já estamos usando o ` no início da consulta.

Na próxima função vamos implementar verificando o conteúdo de um campo do tipo array. Usaremos o operador CONTAINS:

Resultado:

Verificamos no campo tags o valor saúde. Para exibir utilizamos a função JSON.stringify.

Podemos também realizar cálculos como média, mínimo e máximo dos valores. A função seguinte apresenta a implementação:

O console ficou:

Infelizmente a biblioteca ainda tem algumas restrições e limites como:

  • Somente SELECT por enquanto. Há previsão para implementações futuras par INSERT, UPDATE e DELETE;
  • Não suporta JOINs nem negação NOT :(
  • LIMIT não aceita OFFSET somente um número
  • GROUP BY não pode ser utilizado com ORDER BY

De qualquer forma, é uma biblioteca muito interessante, pois é ajustada para criar uma quantidade mínima de consultas nos servidores do Firebase.

Fica a dica.

Links

Written by

Professor e desenvolvedor

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store