En aquest tema, aprendrem sobre les referències a MongoDB, una tècnica essencial per modelar relacions entre documents en una base de dades NoSQL. Les referències ens permeten enllaçar documents de diferents col·leccions, similar a les claus foranes en bases de dades SQL.
Conceptes Clau
- Referències Manuales: Enllaçar documents mitjançant identificadors.
- $lookup: Operació d'agregació per unir col·leccions.
- Normalització vs. Desnormalització: Estratègies de modelatge de dades.
Referències Manuales
Les referències manuals impliquen emmagatzemar l'identificador d'un document en un altre document. Això ens permet enllaçar documents de diferents col·leccions.
Exemple
Suposem que tenim dues col·leccions: autors
i llibres
.
Col·lecció autors
:
Col·lecció llibres
:
{ "_id": ObjectId("60c72b3f9b1d8b3a4c8b4568"), "títol": "Harry Potter i la Pedra Filosofal", "autor_id": ObjectId("60c72b2f9b1d8b3a4c8b4567") }
En aquest exemple, el camp autor_id
en el document del llibre emmagatzema l'identificador de l'autor corresponent.
Recuperar Documents Relacionats
Per recuperar documents relacionats, primer obtenim l'identificador del document referenciat i després fem una segona consulta.
Exemple en JavaScript (Node.js):
const MongoClient = require('mongodb').MongoClient; async function getBookWithAuthor(bookId) { const client = await MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true, useUnifiedTopology: true }); const db = client.db('biblioteca'); const book = await db.collection('llibres').findOne({ _id: bookId }); const author = await db.collection('autors').findOne({ _id: book.autor_id }); console.log({ títol: book.títol, autor: author.nom, nacionalitat: author.nacionalitat }); client.close(); } getBookWithAuthor(ObjectId("60c72b3f9b1d8b3a4c8b4568"));
$lookup: Unir Col·leccions
L'operació $lookup
ens permet unir col·leccions en una sola consulta, similar a una operació JOIN en SQL.
Exemple
Consulta amb $lookup
:
db.llibres.aggregate([ { $lookup: { from: "autors", localField: "autor_id", foreignField: "_id", as: "autor_info" } } ]);
Aquesta consulta unirà la col·lecció llibres
amb la col·lecció autors
basant-se en el camp autor_id
i emmagatzemarà la informació de l'autor en un camp anomenat autor_info
.
Normalització vs. Desnormalització
Normalització
La normalització implica dividir les dades en múltiples col·leccions per reduir la redundància. Això és útil quan les dades canvien freqüentment.
Avantatges:
- Menys redundància.
- Actualitzacions més fàcils.
Desavantatges:
- Consultes més complexes.
- Més operacions de lectura.
Desnormalització
La desnormalització implica emmagatzemar dades relacionades en un sol document. Això és útil per a consultes ràpides.
Avantatges:
- Consultes més ràpides.
- Menys operacions de lectura.
Desavantatges:
- Més redundància.
- Actualitzacions més complicades.
Exercici Pràctic
Enunciat
- Crea dues col·leccions:
clients
icomandes
. - Afegeix documents a cada col·lecció amb una referència manual.
- Utilitza
$lookup
per unir les col·leccions i mostrar els resultats.
Solució
Col·lecció clients
:
{ "_id": ObjectId("60c72b4f9b1d8b3a4c8b4569"), "nom": "Anna Pérez", "correu": "[email protected]" }
Col·lecció comandes
:
{ "_id": ObjectId("60c72b5f9b1d8b3a4c8b4570"), "producte": "Ordinador Portàtil", "quantitat": 1, "client_id": ObjectId("60c72b4f9b1d8b3a4c8b4569") }
Consulta amb $lookup
:
db.comandes.aggregate([ { $lookup: { from: "clients", localField: "client_id", foreignField: "_id", as: "client_info" } } ]);
Conclusió
Les referències a MongoDB són una tècnica poderosa per modelar relacions entre documents. Hem après a utilitzar referències manuals i l'operació $lookup
per unir col·leccions. També hem discutit les estratègies de normalització i desnormalització per optimitzar el modelatge de dades. Amb aquests coneixements, estàs preparat per gestionar relacions complexes en les teves bases de dades MongoDB.
Curs de MongoDB
Mòdul 1: Introducció a MongoDB
Mòdul 2: Operacions CRUD a MongoDB
Mòdul 3: Modelatge de Dades a MongoDB
Mòdul 4: Indexació i Agregació
Mòdul 5: Funcions Avançades de MongoDB
Mòdul 6: Rendiment i Seguretat
- Optimització del Rendiment
- Còpia de Seguretat i Restauració
- Millors Pràctiques de Seguretat
- Monitorització i Alertes