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 |
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.
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.
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.
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: