Els documents encaixats són una característica poderosa de MongoDB que permet emmagatzemar documents dins d'altres documents. Aquesta capacitat és útil per representar relacions jeràrquiques i estructures de dades complexes de manera natural i eficient.

Conceptes Clau

Què són els Documents Encaixats?

Els documents encaixats són documents que es troben dins d'altres documents. En lloc de tenir una relació entre dues col·leccions separades, podem emmagatzemar la informació relacionada dins d'un sol document.

Avantatges dels Documents Encaixats

  1. Consulta Eficient: Redueix la necessitat de fer múltiples consultes per obtenir dades relacionades.
  2. Atomicitat: Les operacions en un document encaixat són atòmiques, el que significa que es garanteix la consistència de les dades.
  3. Simplicitat: Simplifica el model de dades i el codi de l'aplicació.

Desavantatges dels Documents Encaixats

  1. Limitació de Mida: Els documents en MongoDB tenen una mida màxima de 16 MB.
  2. Actualitzacions Complexes: Les actualitzacions en documents molt grans poden ser més complicades i menys eficients.

Exemples Pràctics

Exemple 1: Emmagatzemar Adreces dins d'un Document d'Usuari

{
  "nom": "Joan",
  "cognom": "Pérez",
  "adreces": [
    {
      "tipus": "casa",
      "carrer": "Carrer Major, 123",
      "ciutat": "Barcelona",
      "codi_postal": "08001"
    },
    {
      "tipus": "treball",
      "carrer": "Carrer de l'Empresa, 456",
      "ciutat": "Barcelona",
      "codi_postal": "08002"
    }
  ]
}

Exemple 2: Emmagatzemar Comentaris dins d'un Document de Blog

{
  "títol": "Introducció a MongoDB",
  "autor": "Maria",
  "contingut": "MongoDB és una base de dades NoSQL...",
  "comentaris": [
    {
      "autor": "Pere",
      "contingut": "Gran article!",
      "data": "2023-10-01"
    },
    {
      "autor": "Anna",
      "contingut": "Molt útil, gràcies!",
      "data": "2023-10-02"
    }
  ]
}

Operacions amb Documents Encaixats

Inserir Documents Encaixats

db.usuaris.insertOne({
  nom: "Joan",
  cognom: "Pérez",
  adreces: [
    {
      tipus: "casa",
      carrer: "Carrer Major, 123",
      ciutat: "Barcelona",
      codi_postal: "08001"
    },
    {
      tipus: "treball",
      carrer: "Carrer de l'Empresa, 456",
      ciutat: "Barcelona",
      codi_postal: "08002"
    }
  ]
});

Consultar Documents Encaixats

db.usuaris.find({
  "adreces.ciutat": "Barcelona"
});

Actualitzar Documents Encaixats

db.usuaris.updateOne(
  { nom: "Joan" },
  { $set: { "adreces.$[elem].carrer": "Carrer Nou, 789" } },
  { arrayFilters: [ { "elem.tipus": "casa" } ] }
);

Eliminar Documents Encaixats

db.usuaris.updateOne(
  { nom: "Joan" },
  { $pull: { adreces: { tipus: "treball" } } }
);

Exercicis Pràctics

Exercici 1: Crear un Document amb Documents Encaixats

Crea un document per a un producte que contingui informació sobre les seves variants (color, mida, preu).

Exercici 2: Consultar Documents Encaixats

Consulta tots els usuaris que tenen una adreça a "Barcelona".

Exercici 3: Actualitzar Documents Encaixats

Actualitza el carrer de l'adreça de casa de l'usuari "Joan" a "Carrer Nou, 789".

Exercici 4: Eliminar Documents Encaixats

Elimina l'adreça de treball de l'usuari "Joan".

Solucions

Solució a l'Exercici 1

db.productes.insertOne({
  nom: "Samarreta",
  variants: [
    {
      color: "vermell",
      mida: "M",
      preu: 19.99
    },
    {
      color: "blau",
      mida: "L",
      preu: 21.99
    }
  ]
});

Solució a l'Exercici 2

db.usuaris.find({
  "adreces.ciutat": "Barcelona"
});

Solució a l'Exercici 3

db.usuaris.updateOne(
  { nom: "Joan" },
  { $set: { "adreces.$[elem].carrer": "Carrer Nou, 789" } },
  { arrayFilters: [ { "elem.tipus": "casa" } ] }
);

Solució a l'Exercici 4

db.usuaris.updateOne(
  { nom: "Joan" },
  { $pull: { adreces: { tipus: "treball" } } }
);

Conclusió

Els documents encaixats són una eina poderosa en MongoDB que permeten emmagatzemar dades relacionades de manera eficient i natural. Tot i que tenen alguns desavantatges, els seus beneficis en termes de consulta eficient i atomicitat sovint superen les limitacions. Amb la pràctica, podràs dissenyar esquemes de dades que aprofitin al màxim aquesta característica.

© Copyright 2024. Tots els drets reservats