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": "john.doe@example.com",
"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": "john.doe@example.com",
"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 "jane.doe@example.com".
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": "jane.doe@example.com",
"password": "hashed_password",
"following": []
});Solució 2: Crear una Publicació
const user = db.users.findOne({ "email": "jane.doe@example.com" });
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": "jane.doe@example.com" });
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": "jane.doe@example.com" });
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
