En aquest tema, explorarem el model de dades de Cloud Firestore, que és una base de dades NoSQL flexible i escalable per al desenvolupament d'aplicacions mòbils, web i de servidor. Firestore emmagatzema dades en documents, que s'organitzen en col·leccions. Aquesta estructura permet una gran flexibilitat i escalabilitat.
Conceptes clau
- Documents
 
- Definició: Un document és una unitat de dades que conté parells clau-valor.
 - Identificador: Cada document té un identificador únic dins de la seva col·lecció.
 - Dades: Els documents poden contenir dades de diversos tipus, com ara cadenes, nombres, booleans, mapes, matrius, referències, etc.
 
- Col·leccions
 
- Definició: Una col·lecció és un conjunt de documents.
 - Organització: Les col·leccions no poden contenir directament altres col·leccions, però els documents dins d'una col·lecció poden tenir subcol·leccions.
 
- Subcol·leccions
 
- Definició: Una subcol·lecció és una col·lecció que existeix dins d'un document.
 - Nidificació: Les subcol·leccions poden tenir els seus propis documents, que al seu torn poden tenir les seves pròpies subcol·leccions, permetent una estructura de dades jeràrquica.
 
- Tipus de dades
 
- Cadenes: Text.
 - Nombres: Enters i flotants.
 - Booleans: 
trueofalse. - Mapes: Objectes anidats.
 - Matrius: Llistes de valors.
 - Referències: Enllaços a altres documents.
 - Marques de temps: Dates i hores.
 - Geopunts: Coordenades geogràfiques.
 
Exemples pràctics
Crear un document
// Accedir a la col·lecció 'usuaris' i afegir un nou document
db.collection("usuaris").add({
    nom: "Joan",
    edat: 30,
    correu: "[email protected]",
    adreça: {
        carrer: "Carrer Major",
        ciutat: "Barcelona"
    },
    interessos: ["programació", "lectura", "esports"]
})
.then((docRef) => {
    console.log("Document escrit amb ID: ", docRef.id);
})
.catch((error) => {
    console.error("Error afegint document: ", error);
});Llegir un document
// Accedir a un document específic dins de la col·lecció 'usuaris'
var docRef = db.collection("usuaris").doc("ID_DEL_DOCUMENT");
docRef.get().then((doc) => {
    if (doc.exists) {
        console.log("Dades del document:", doc.data());
    } else {
        console.log("No s'ha trobat el document!");
    }
}).catch((error) => {
    console.log("Error obtenint document:", error);
});Actualitzar un document
// Actualitzar un document específic dins de la col·lecció 'usuaris'
var docRef = db.collection("usuaris").doc("ID_DEL_DOCUMENT");
docRef.update({
    edat: 31,
    "adreça.ciutat": "Madrid"
})
.then(() => {
    console.log("Document actualitzat amb èxit!");
})
.catch((error) => {
    console.error("Error actualitzant document: ", error);
});Eliminar un document
// Eliminar un document específic dins de la col·lecció 'usuaris'
db.collection("usuaris").doc("ID_DEL_DOCUMENT").delete().then(() => {
    console.log("Document eliminat amb èxit!");
}).catch((error) => {
    console.error("Error eliminant document: ", error);
});Exercicis pràctics
Exercici 1: Crear i llegir documents
- 
Crear un document: Crea un document en una col·lecció anomenada
productesamb els següents camps:nom: "Portàtil"preu: 1200disponibilitat: true
 - 
Llegir el document: Llegeix el document que acabes de crear i mostra les dades a la consola.
 
Solució
// Crear un document
db.collection("productes").add({
    nom: "Portàtil",
    preu: 1200,
    disponibilitat: true
})
.then((docRef) => {
    console.log("Document escrit amb ID: ", docRef.id);
    // Llegir el document
    return docRef.get();
})
.then((doc) => {
    if (doc.exists) {
        console.log("Dades del document:", doc.data());
    } else {
        console.log("No s'ha trobat el document!");
    }
})
.catch((error) => {
    console.error("Error: ", error);
});Exercici 2: Actualitzar i eliminar documents
- Actualitzar un document: Actualitza el document creat en l'exercici anterior per canviar el camp 
preua 1100. - Eliminar el document: Elimina el document després d'actualitzar-lo.
 
Solució
// Actualitzar el document
var docRef = db.collection("productes").doc("ID_DEL_DOCUMENT");
docRef.update({
    preu: 1100
})
.then(() => {
    console.log("Document actualitzat amb èxit!");
    // Eliminar el document
    return docRef.delete();
})
.then(() => {
    console.log("Document eliminat amb èxit!");
})
.catch((error) => {
    console.error("Error: ", error);
});Conclusió
En aquest tema, hem après sobre el model de dades de Firestore, incloent-hi els conceptes de documents, col·leccions i subcol·leccions, així com els diferents tipus de dades que es poden emmagatzemar. També hem vist exemples pràctics de com crear, llegir, actualitzar i eliminar documents. Aquests coneixements són fonamentals per treballar amb Firestore de manera eficient i efectiva. En el següent tema, explorarem les operacions CRUD en més detall.
Curs de Firebase
Mòdul 1: Introducció a Firebase
Mòdul 2: Autenticació de Firebase
- Introducció a l'autenticació de Firebase
 - Autenticació amb correu electrònic i contrasenya
 - Autenticació amb xarxes socials
 - Gestió d'usuaris
 
Mòdul 3: Base de dades en temps real de Firebase
- Introducció a la base de dades en temps real
 - Lectura i escriptura de dades
 - Estructura de dades i regles de seguretat
 - Capacitats fora de línia
 
Mòdul 4: Cloud Firestore
- Introducció a Cloud Firestore
 - Model de dades de Firestore
 - Operacions CRUD
 - Consultes avançades
 - Regles de seguretat
 
Mòdul 5: Emmagatzematge de Firebase
- Introducció a l'emmagatzematge de Firebase
 - Carregar fitxers
 - Descarregar fitxers
 - Metadades de fitxers i seguretat
 
Mòdul 6: Missatgeria en el núvol de Firebase
- Introducció a la missatgeria en el núvol
 - Enviar notificacions
 - Gestionar notificacions
 - Funcions avançades de missatgeria
 
Mòdul 7: Analítica de Firebase
Mòdul 8: Funcions de Firebase
Mòdul 9: Monitoratge del rendiment de Firebase
- Introducció al monitoratge del rendiment
 - Configuració del monitoratge del rendiment
 - Analitzar dades de rendiment
 
