← Tilbage til databaser

MongoDB

NoSQL

Den mest populære dokumentorienterede NoSQL-database med fleksibelt skema og horisontal skalering.

Beskrivelse

MongoDB er en dokumentdatabase der gemmer data i fleksible JSON-lignende dokumenter (BSON-format) i stedet for rigide tabeller med rækker. Dette giver udviklere frihed til at arbejde med data på en mere naturlig måde der matcher objektorienteret programmering. Hvert dokument kan have sin egen struktur, hvilket gør skemaændringer meget lettere end i relationelle databaser. MongoDB er designet til skalering og distribuerede systemer med indbygget sharding, replikering og høj tilgængelighed. Den udmærker sig ved høje skrivebyrder, hurtig iteration og brugsscenarier hvor datastrukturen udvikler sig over tid. Med funktioner som aggregeringspipeline, ændringsstrømme, fuldtekstsøgning og geospatiale forespørgsler er MongoDB blevet standardvalget for moderne, agile applikationer. Firmaer som eBay, SEGA, Adobe og Cisco bruger MongoDB til missionskritiske systemer.

Features

  • Fleksibelt skema med JSON-dokumenter
  • Horisontal skalering via sharding
  • Replikasæt for høj tilgængelighed
  • Kraftfuldt aggregeringsframework
  • Ændringsstrømme for realtidsopdateringer
  • Native geospatiale forespørgsler
  • Fuldtekstsøgning
  • ACID-transaktioner (siden 4.0)

Query Eksempel

// Opret collection og indsæt dokumenter
db.users.insertMany([
  {
    name: "Maria Nielsen",
    email: "maria@email.dk",
    age: 28,
    address: {
      street: "Hovedgaden 123",
      city: "København",
      postalCode: "2100"
    },
    interests: ["reading", "hiking", "photography"],
    orders: [
      { product: "Laptop", price: 8999, date: new Date("2024-01-15") },
      { product: "Mouse", price: 299, date: new Date("2024-01-20") }
    ]
  },
  {
    name: "Peter Hansen",
    email: "peter@email.dk",
    age: 35,
    interests: ["gaming", "cooking"]
    // Bemærk: Ingen adresse - fleksibelt skema!
  }
]);

// Find dokumenter
db.users.find({ age: { $gte: 30 } });

// Aggregeringspipeline
db.users.aggregate([
  { $unwind: "$orders" },
  { $group: {
      _id: "$name",
      totalSpent: { $sum: "$orders.price" },
      orderCount: { $sum: 1 }
    }
  },
  { $sort: { totalSpent: -1 } }
]);

// Opret indeks
db.users.createIndex({ email: 1 }, { unique: true });

Anvendelsesområder

  • Indholdsstyring og katalogsystemer
  • Realtidsanalyser og IoT-data
  • Mobil- og sociale medie-applikationer
  • Produktkataloger med varierende attributter
  • Brugerprofiler og personalisering

Fordele

  • Hurtig udvikling med fleksibelt skema
  • Fremragende horisontal skalering
  • Naturlig mapping til objektorienteret kode
  • Høj skrivegennemstrømning
  • Rigt forespørgselssprog

Ulemper

  • Ingen joins (må denormalisere data)
  • Kan bruge mere diskplads
  • Transaktionsunderstøttelse er begrænset
  • Hukommelseskrævende
  • Ikke ideel til komplekse relationer

Bedst til

  • Hurtig prototyping og MVP-udvikling
  • Applikationer med udviklende datamodeller
  • Scenarier med høj skrivegennemstrømning
  • Hierarkiske datastrukturer
  • Realtidsdatabehandling

Ikke anbefalet til

  • Komplekse multi-tabel joins
  • Finansielle transaktioner (brug SQL)
  • Applikationer der kræver strengt skema
  • Tunge analytiske arbejdsbyrder
  • Når diskplads er kritisk

Relaterede databaser

CouchDBDynamoDBFirebaseCouchbase