MongoDB
NoSQLDen 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