Lese data fra Cloud Firestore
I artikkelen "Skrive data til Cloud Firestore" lærte du hvordan du legger inn data i databasen. I denne artikkelen skal du lære hvordan du henter data ut fra databasen og lager spørringer for å velge hvilke data du vil hente ut.
I denne leksjonen skal du bruke følgende Firebase-funksjoner:
collection, doc, addDoc, setDoc, getDoc, getDocs, query, where, orderBy
Pass på å importere disse fra (...)/firebase-firestore.js i koden din (lim inn linja over etter import { getFirestore,
i koden din).
For at du skal kunne ha data å jobbe med, kan du kopiere koden under til skriptet ditt for å legge inn fire elever i databasen din:
I likhet med at det finnes flere måter å skrive data til databasen på, finnes det også flere måter å lese fra databasen på. De enkleste er getDoc()
og getDocs()
.
Hente ut ett dokument fra databasen med getDoc()
getDoc()
brukes til å hente ut enkeltdokumenter fra databasen og krever at du vet ID-en til dokumentet du skal hente. I likhet med setDoc()
bruker getDoc()
funksjonen doc()
for å angi hvilket dokument som skal hentes ut. getDoc()
returnerer et databaseobjekt, og derfor må du opprette en variabel for å lagre dataene som hentes ut.
Koden for å hente ut dokumentet vi lagde for eleven Jakob Nilsen, blir som under.
Merk at vi skriver await
foran getDoc()
for å sørge for at neste linje i koden ikke kjøres før kommunikasjonen med databasen er ferdig.
Resultatet blir skrevet ut slik i konsollen:
Når vi henter ut data fra databasen, kaller vi det vi henter ut et "snapshot", for det representerer et øyeblikksbilde av dataene i det øyeblikket vi henter dem ut fra databasen. const docSnap
i koden over representerer et øyeblikksbilde av ett dokument i databasen (docSnap er her bare et variabelnavn og kan i utgangspunktet være hva som helst, men dette er et eksempel på et beskrivende variabelnavn). docSnap.data()
henter ut alle dataene som er lagret i dokumentet og presenterer dem som et objekt. Om du vil hente ut enkeltdata, kan du angi det slik:
Prøv å lime inn disse to linjene i koden din og se hva som blir skrevet ut i konsollen.
Hente ut alle dokumentene i ei samling med getDocs()
getDocs()
brukes for å hente ut flere dokumenter på en gang fra databasen. Det kan være enten alle dokumentene i ei samling eller et utvalg basert på gitte kriterier (query). getDocs()
returnerer ei liste (array) med databaseobjekter.
For å hente ut alle dokumentene i ei samling bruker vi collection()
inne i getDocs()
for å angi hvilken samling vi skal hente dokumentene fra. For å hente ut alle dokumentene i elevlista blir koden slik:
snapshot.forEach()
er ei løkke som kjører en gang for hvert dokument (docSnap
) i samlinga. I eksempelet skriver denne løkka ut fornavn og etternavn til alle elevene til konsollen:
Med query()
kan vi lage spørringer mot databasen. En spørring er en betingelse for å filtrere, begrense eller sortere dataene som skrives ut. Dette fungerer i utgangspunktet på samme måte som i SQL. For eksempel kan vi hente ut bare elever som er registrert med e-post, eller vi kunne ha hentet ut bare elever som har matematikk som et av sine fag. For å lage en spørring kan vi bruke funksjonene where()
, orderBy()
, startAt()
, startAfter()
, endAt()
, limit()
eller limitToLast()
.
For eksempel kan vi lage en spørring for å hente ut alle elever, sortert på etternavn:
Vi kan også lage en spørring for å bare hente ut elever som er registrert med e-post:
Betingelsen where("epost", "!=", "undefined")
betyr at e-post skal være ikke lik (!=
) "undefined". Det vil si at spørringen utelukker elever som ikke har registrert e-post (epost == undefined
).
Vi skal nå bruke denne spørringen opp mot databasen og skrive ut resultatet:
querySnapshot.forEach()
skriver ut alle resultatene av spørringen i konsollen:
Related content
I denne guiden vil du lære et basisoppsett som du skal bruke videre i modulen "Lage en dynamisk webside med databasekobling i Firebase Cloud Firestore".
I NoSQL-databaser organiseres data i samlinger og dokumenter. I denne artikkelen skal du lære to metoder for å opprette dokumenter i Cloud Firestore.