En aquest tema, aprendrem a utilitzar MongoDB, una base de dades NoSQL, amb Mongoose, una biblioteca de modelatge d'objectes per Node.js que proporciona una solució elegant per treballar amb MongoDB. Mongoose facilita la definició d'esquemes per als nostres documents MongoDB i proporciona una API per interactuar amb la base de dades.

Continguts

Introducció a MongoDB i Mongoose

MongoDB

MongoDB és una base de dades NoSQL orientada a documents que emmagatzema dades en documents BSON (una extensió binària de JSON). És coneguda per la seva escalabilitat i flexibilitat.

Mongoose

Mongoose és una biblioteca de Node.js que proporciona una solució basada en esquemes per modelar les dades de l'aplicació. Ofereix validació, càlculs, middleware i altres funcionalitats per facilitar el treball amb MongoDB.

Instal·lació de MongoDB i Mongoose

Instal·lació de MongoDB

Per instal·lar MongoDB, segueix les instruccions de la documentació oficial de MongoDB.

Instal·lació de Mongoose

Per instal·lar Mongoose, utilitza npm (Node Package Manager):

npm install mongoose

Connexió a MongoDB

Per connectar-nos a una base de dades MongoDB amb Mongoose, primer hem de requerir el mòdul mongoose i després utilitzar el mètode connect per establir la connexió.

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/nombredb', {
  useNewUrlParser: true,
  useUnifiedTopology: true
}).then(() => {
  console.log('Connexió a MongoDB establerta');
}).catch((error) => {
  console.error('Error connectant a MongoDB:', error);
});

Definició d'Esquemes i Models

Esquema

Un esquema en Mongoose defineix l'estructura dels documents dins d'una col·lecció, especificant els camps i els seus tipus.

const Schema = mongoose.Schema;

const usuariSchema = new Schema({
  nom: { type: String, required: true },
  edat: { type: Number, required: true },
  email: { type: String, required: true, unique: true }
});

Model

Un model és una classe que ens permet interactuar amb els documents d'una col·lecció. Es crea a partir d'un esquema.

const Usuari = mongoose.model('Usuari', usuariSchema);

Operacions CRUD amb Mongoose

Crear

Per crear un nou document, utilitzem el mètode save del model.

const nouUsuari = new Usuari({
  nom: 'Joan',
  edat: 30,
  email: '[email protected]'
});

nouUsuari.save().then((resultat) => {
  console.log('Usuari creat:', resultat);
}).catch((error) => {
  console.error('Error creant usuari:', error);
});

Llegir

Per llegir documents, utilitzem el mètode find.

Usuari.find().then((usuaris) => {
  console.log('Usuaris trobats:', usuaris);
}).catch((error) => {
  console.error('Error llegint usuaris:', error);
});

Actualitzar

Per actualitzar un document, utilitzem el mètode findByIdAndUpdate.

Usuari.findByIdAndUpdate('id_usuari', { edat: 31 }, { new: true }).then((usuariActualitzat) => {
  console.log('Usuari actualitzat:', usuariActualitzat);
}).catch((error) => {
  console.error('Error actualitzant usuari:', error);
});

Eliminar

Per eliminar un document, utilitzem el mètode findByIdAndDelete.

Usuari.findByIdAndDelete('id_usuari').then((usuariEliminat) => {
  console.log('Usuari eliminat:', usuariEliminat);
}).catch((error) => {
  console.error('Error eliminant usuari:', error);
});

Exercicis Pràctics

Exercici 1: Crear un Model de Producte

  1. Defineix un esquema per a un producte amb els següents camps: nom, preu, categoria.
  2. Crea un model a partir de l'esquema.
  3. Crea i desa un nou producte.

Exercici 2: Llegir i Actualitzar Productes

  1. Llegeix tots els productes de la base de dades.
  2. Actualitza el preu d'un producte específic.

Exercici 3: Eliminar Productes

  1. Elimina un producte de la base de dades.

Solucions

Solució Exercici 1

const producteSchema = new Schema({
  nom: { type: String, required: true },
  preu: { type: Number, required: true },
  categoria: { type: String, required: true }
});

const Producte = mongoose.model('Producte', producteSchema);

const nouProducte = new Producte({
  nom: 'Ordinador',
  preu: 1000,
  categoria: 'Electrònica'
});

nouProducte.save().then((resultat) => {
  console.log('Producte creat:', resultat);
}).catch((error) => {
  console.error('Error creant producte:', error);
});

Solució Exercici 2

Producte.find().then((productes) => {
  console.log('Productes trobats:', productes);
}).catch((error) => {
  console.error('Error llegint productes:', error);
});

Producte.findByIdAndUpdate('id_producte', { preu: 1200 }, { new: true }).then((producteActualitzat) => {
  console.log('Producte actualitzat:', producteActualitzat);
}).catch((error) => {
  console.error('Error actualitzant producte:', error);
});

Solució Exercici 3

Producte.findByIdAndDelete('id_producte').then((producteEliminat) => {
  console.log('Producte eliminat:', producteEliminat);
}).catch((error) => {
  console.error('Error eliminant producte:', error);
});

Conclusió

En aquest tema, hem après a utilitzar MongoDB amb Mongoose per gestionar les nostres dades de manera eficient. Hem vist com connectar-nos a una base de dades, definir esquemes i models, i realitzar operacions CRUD. Amb aquests coneixements, estem preparats per treballar amb bases de dades NoSQL en les nostres aplicacions Node.js.

Curs de Node.js

Mòdul 1: Introducció a Node.js

Mòdul 2: Conceptes Bàsics

Mòdul 3: Sistema de Fitxers i I/O

Mòdul 4: HTTP i Servidors Web

Mòdul 5: NPM i Gestió de Paquets

Mòdul 6: Framework Express.js

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats