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.

  1. 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.

{
  "_id": ObjectId("..."),
  "post_id": ObjectId("..."),
  "user_id": ObjectId("...")
}

  1. 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"

db.likes.insertOne({
  "post_id": ObjectId("..."),
  "user_id": ObjectId("...")
});

  1. 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.

db.posts.createIndex({ "user_id": 1 });

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.

db.comments.createIndex({ "post_id": 1 });

  1. 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.

© Copyright 2024. Tots els drets reservats