Når vi skal hente data fra Cloud Firestore, kan vi hente ut ett enkelt dokument eller alle dokumentene i ei samling. Vi kan også bruke spørringer for å hente utvalgte dokumenter som oppfyller en eller flere betingelser.
I leksjonen Legge inn data i en Firebase-databaseLegge inn data i en Firebase-databaseI NoSQL-databaser organiseres data i samlinger som består av flere dokumenter. I denne artikkelen skal du lære to metoder for å opprette dokumenter i Cloud Firestore. Bilde: Karl Arne Dalsaune L... 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.
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:
//Importerer Firebase-funksjonene vi trenger import { setDoc, doc } from "https://www.gstatic.com/firebasejs/9.6.3/firebase-firestore.js"; //Legger inn fire elever i databasen await setDoc( doc(db, "elever", "thore"), { fornavn: "Rebecca", etternavn: "Thomasen", telefon: "12345678" }); await setDoc( doc(db, "elever", "nilja"), { fornavn: "Jakob", etternavn: "Nilsen", epost: "jakob@nilsen.net" }); await setDoc( doc(db, "elever", "moisa"), { fornavn: "Isa", etternavn: "Mo", epost: "isamo@mo.no", telefon: "23456789" }); await setDoc( doc(db, "elever", "marga"), { fornavn: "Gabrielle", etternavn: "Martin", telefon: "45678901" });
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().
getDoc()
getDocs()
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.
setDoc()
doc()
Koden for å hente ut dokumentet vi lagde for eleven Jakob Nilsen, blir slik:
// import { getDoc, doc } from "https://www.gstatic.com/firebasejs/9.6.3/firebase-firestore.js"; const doc = await getDoc( doc(db, "elever", "nilja") ); console.log( "Document data:", doc.data() );
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.
await
Resultatet blir skrevet ut slik i konsollen:
Document data: >{fornavn: 'Jakob', etternavn: 'Nilsen', epost: 'jakob@nilsen.net'}
Slik ser utskriften ut i "Inspiser"-vinduet til nettleseren. Bilde: Google Chrome
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 doc i koden over representerer et øyeblikksbilde av ett dokument i databasen (doc er her bare et variabelnavn og kan i utgangspunktet være hva som helst, men dette er et eksempel på et beskrivende variabelnavn). doc.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:
const doc
doc.data()
console.log( "ID:", doc.id, "Navn:", doc.data().fornavn, doc.data().etternavn );
Prøv å lime inn disse linjene i koden din og se hva som blir skrevet ut i konsollen.
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:
collection()
// import { getDocs, collection } from "https://www.gstatic.com/firebasejs/9.6.3/firebase-firestore.js"; const snapshot = await getDocs( collection(db, "elever") ); snapshot.forEach((doc) => { console.log( doc.data().fornavn, doc.data().etternavn ); });
snapshot.forEach() er ei løkke som kjører en gang for hvert dokument (doc) i samlinga. I eksempelet skriver denne løkka ut fornavn og etternavn til alle elevene til konsollen:
snapshot.forEach()
doc
Utskrift av fornavn og etternavn til alle elever i databasen Bilde: Google
Om Firebaseplattformen Oppsett av Firebase og Cloud Firestore Forskjellen på relasjonsdatabas...
Endre et dokument i databasen Hvis du trenger å endre data i et dokument som allerede er lagret ...
© 2024 • Contents under CC-BY-NC • Maintained by Karl Arne Dalsaune