Cloud Firestore.

Wat is Cloud Firestore.

Cloud Firestore is een NoSQL-documentdatabase voor het ontwikkelen van mobiele apps en webapps.

De belangrijkste kenmerken zijn:

  • De datastructuur is opgebouwd uit documenten met daarin collecties. Een collectie kan op zich weer geneste documenten en collecties bevatten.
  • Je kan op een eenvoudige manier queries uitvoeren op een document (sorteren, filteren, zoekresultaat beperken, ...)
  • Er zijn verschillende SDK's beschikbaar voor a.o. Android, iOS, web, Node, Pyton, Go, Java, ...
  • Real-time data synchronisatie tussen verschillende clients.
  • Offline data access. Ben je even offline? Geen probleem. Alle handelingen worden lokaal bewaard en zodra je terug online bent worden alle handelingen alsnog uitgevoerd.

Relationele database vs NoSQL database.

Rdbms NoSQL (Firestore, MongoDB, ...)
Table Collection
Record Document
Columns Fields
NoSQL database vs. relationele database

CRUD operaties

Importeer firebase en AngularFirestore in de service. Injecteer vervolgens AngularFirestore in de constructor. Vanaf nu kan je de referentie this.afs gebruiken om CRUD-operaties uit te voeren.


                

Onderstaande voorbeelden worden verduidelijkt aan de hand van een eenvoudige users collection.

Users collection

Lees (observeer) alle data wijzigingen in de volledige collectie.

  • De methode valueChanges() observeert alle data wijzigingen in de volledige collectie.
  • Door de volledige functie binnen de constructor te koppelen aan de variabele allData$, kan je later in een component alle wijzigingen "live" volgen.
  • De variabele allData$ bevat een array van JSON-objecten.
Je kan binnen de methode collection() nog een tweede parameter meegeven waarmee je het zoekresultaat kan beïnvloeden. Zie AngularFire2 Query Options.

            

Bijvoorbeeld:


            

            

Lees (observeer) alle data wijzigingen van één document.

  • De methode valueChanges() observeert nu alle data wijzigingen van één document binnen de collecie.
  • De variabele data$ is een observable en bevat één JSON-object.
  • Je kan één van de twee methodes uit het voorbeeld gebruiken.

            

Bijvoorbeeld:


            

            

Nieuw document toevoegen.

De methode valueChanges() leest ENKEL de data in het document. De documentnaam (of sleutel of key) van het document kan je met deze methode NIET opvragen. Met de methode snapshotChanges() kan je zowel de data als alle randinfo (inclusief de sleutel) opvragen. Deze methode heeft dan weer als nadeel dat je wel wat extra bewerkingen moet uitvoeren om de data uit het resultaat te puzzelen.

Daarom is het veel interessanter om, zoals in deze code, Firestore eerst een sleutel te laten berekenen en de sleutel dan bij in de data te bewaren.

  • De methode .createId() berekent een unieke sleutel die je als documentnaam gaat gebruiken en eveneens als userId in de data verwerkt.
  • De methode set(object) voegt een nieuw document aan de collectie toe.
  • Je kan één van de twee methodes uit het voorbeeld gebruiken.
  • De methode set(object) geeft een promise terug.
Je kan de methode set(object) ook gebruiken om velden van een bestaand document te vernieuwen. Let wel op dat je dan ALLE velden terug meegeeft! De velden die je niet meegeeft, verdwijnen uit het document.
Als je maar één of enkele velden wilt wijzigen, gebruik je beter de methode update(object).

            

Bijvoorbeeld:


            

            

Eén of meerdere velden in een document wijzigen.

  • Met de methode update(object) kan je één of meerdere velden binnen een document aanpassen.

            

Bijvoorbeeld:


            

            

Document wissen.

  • Met de methode delete() kan je een document wissen.

            

Bijvoorbeeld: