En aquest tema, aprendrem a construir una aplicació de xarxes socials utilitzant MongoDB. Aquesta aplicació permetrà als usuaris registrar-se, crear publicacions, seguir altres usuaris i interactuar amb les publicacions mitjançant comentaris i "m'agrada". A través d'aquest projecte, aplicarem diversos conceptes de MongoDB, com ara el modelatge de dades, les operacions CRUD, l'indexació i l'agregació.
Objectius del Tema
- Dissenyar l'esquema de dades per a una aplicació de xarxes socials.
- Implementar operacions CRUD per a usuaris, publicacions, comentaris i "m'agrada".
- Utilitzar indexació per millorar el rendiment de les consultes.
- Aplicar el marc d'agregació per obtenir dades complexes.
- Disseny de l'Esquema de Dades
1.1. Col·lecció d'Usuaris
Cada usuari tindrà un document que conté informació bàsica com el nom, el correu electrònic, la contrasenya (encriptada) i una llista d'usuaris que segueix.
{ "_id": ObjectId("..."), "name": "John Doe", "email": "[email protected]", "password": "hashed_password", "following": [ObjectId("..."), ObjectId("...")] }
1.2. Col·lecció de Publicacions
Cada publicació contindrà el contingut de la publicació, l'identificador de l'usuari que la va crear, la data de creació, i llistes d'identificadors per a comentaris i "m'agrada".
{ "_id": ObjectId("..."), "user_id": ObjectId("..."), "content": "This is a sample post", "created_at": ISODate("2023-10-01T00:00:00Z"), "comments": [ObjectId("..."), ObjectId("...")], "likes": [ObjectId("..."), ObjectId("...")] }
1.3. Col·lecció de Comentaris
Cada comentari tindrà el contingut del comentari, l'identificador de l'usuari que el va crear, l'identificador de la publicació a la qual pertany, i la data de creació.
{ "_id": ObjectId("..."), "post_id": ObjectId("..."), "user_id": ObjectId("..."), "content": "This is a sample comment", "created_at": ISODate("2023-10-01T00:00:00Z") }
1.4. Col·lecció de "M'agrada"
Cada "m'agrada" tindrà l'identificador de l'usuari que va donar el "m'agrada" i l'identificador de la publicació a la qual pertany.
- Operacions CRUD
2.1. Creant Usuaris
db.users.insertOne({ "name": "John Doe", "email": "[email protected]", "password": "hashed_password", "following": [] });
2.2. Creant Publicacions
db.posts.insertOne({ "user_id": ObjectId("..."), "content": "This is a sample post", "created_at": new Date(), "comments": [], "likes": [] });
2.3. Creant Comentaris
db.comments.insertOne({ "post_id": ObjectId("..."), "user_id": ObjectId("..."), "content": "This is a sample comment", "created_at": new Date() });
2.4. Afegint "M'agrada"
- Indexació
3.1. Índex per a la Col·lecció de Publicacions
Per millorar el rendiment de les consultes que recuperen publicacions per usuari, crearem un índex en el camp user_id
.
3.2. Índex per a la Col·lecció de Comentaris
Per millorar el rendiment de les consultes que recuperen comentaris per publicació, crearem un índex en el camp post_id
.
- Agregació
4.1. Obtenint Publicacions amb Comentaris i "M'agrada"
Utilitzarem el marc d'agregació per obtenir publicacions juntament amb els seus comentaris i "m'agrada".
db.posts.aggregate([ { $lookup: { from: "comments", localField: "_id", foreignField: "post_id", as: "comments" } }, { $lookup: { from: "likes", localField: "_id", foreignField: "post_id", as: "likes" } } ]);
Exercicis Pràctics
Exercici 1: Crear un Usuari
Crea un nou usuari amb el nom "Jane Doe" i el correu electrònic "[email protected]".
Exercici 2: Crear una Publicació
Crea una nova publicació per l'usuari "Jane Doe" amb el contingut "Hello, world!".
Exercici 3: Afegir un Comentari
Afegeix un comentari a la publicació creada en l'exercici 2 amb el contingut "Nice post!".
Exercici 4: Afegir un "M'agrada"
Afegeix un "m'agrada" a la publicació creada en l'exercici 2.
Solucions
Solució 1: Crear un Usuari
db.users.insertOne({ "name": "Jane Doe", "email": "[email protected]", "password": "hashed_password", "following": [] });
Solució 2: Crear una Publicació
const user = db.users.findOne({ "email": "[email protected]" }); db.posts.insertOne({ "user_id": user._id, "content": "Hello, world!", "created_at": new Date(), "comments": [], "likes": [] });
Solució 3: Afegir un Comentari
const post = db.posts.findOne({ "content": "Hello, world!" }); const user = db.users.findOne({ "email": "[email protected]" }); db.comments.insertOne({ "post_id": post._id, "user_id": user._id, "content": "Nice post!", "created_at": new Date() });
Solució 4: Afegir un "M'agrada"
const post = db.posts.findOne({ "content": "Hello, world!" }); const user = db.users.findOne({ "email": "[email protected]" }); db.likes.insertOne({ "post_id": post._id, "user_id": user._id });
Conclusió
En aquest tema, hem après a dissenyar l'esquema de dades per a una aplicació de xarxes socials, implementar operacions CRUD, utilitzar indexació per millorar el rendiment i aplicar el marc d'agregació per obtenir dades complexes. Aquestes habilitats són fonamentals per construir aplicacions robustes i eficients amb MongoDB. En el següent tema, explorarem com gestionar dades IoT amb 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