← Tilbage til databaser

MongoDB

NoSQL

Den mest populære document-orienteret NoSQL database med fleksibel schema og horisontal skalering.

Beskrivelse

MongoDB er en document database 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 objekt-orienteret programmering. Hver document kan have sin egen struktur, hvilket gør schema changes meget lettere end relationelle databaser. MongoDB er designet til skalering og distribuerede systemer med built-in sharding, replication og high availability. Den excellerer ved høje write loads, rapid iteration og use cases hvor data strukturen udvikler sig over tid. Med features som aggregation pipeline, change streams, full-text search og geospatial queries, er MongoDB blevet standard valget for moderne, agile applikationer. Firmaer som eBay, SEGA, Adobe og Cisco bruger MongoDB til mission-critical systemer.

Features

  • Flexible schema med JSON documents
  • Horizontal scaling via sharding
  • Replica sets for high availability
  • Powerful aggregation framework
  • Change streams for real-time updates
  • Native geospatial queries
  • Full-text search capabilities
  • ACID transactions (siden 4.0)

Query Eksempel

// Opret collection og indsæt documents
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"]
    // Note: Ingen address - fleksibel schema!
  }
]);

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

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

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

Anvendelsesområder

  • Content management og katalog systemer
  • Real-time analytics og IoT data
  • Mobile og social media applikationer
  • Product catalogs med varierende attributter
  • User profiles og personalization

Fordele

  • Hurtig udvikling med fleksibel schema
  • Excellent horizontal skalering
  • Natural mapping til objekt-orienteret kode
  • Høj write throughput
  • Rich query language

Ulemper

  • Ingen joins (må denormalisere data)
  • Kan bruge mere disk space
  • Transaction support er begrænset
  • Memory intensive
  • Ikke ideel til komplekse relationer

Bedst til

  • Rapid prototyping og MVP udvikling
  • Applikationer med evolving data models
  • Høj write throughput scenarios
  • Hierarchical data structures
  • Real-time data processing

Ikke anbefalet til

  • Komplekse multi-table joins
  • Financial transactions (brug SQL)
  • Applikationer der kræver strict schema
  • Heavy analytical workloads
  • Når disk space er kritisk

Relaterede databaser

CouchDBDynamoDBFirebaseCouchbase