MongoDB

Dokumentendatenbank mit flexiblen Schemas - JSON-ähnliche Daten speichern, horizontal skalieren, einfach abfragen

TL;DR

Was: Eine dokumentenorientierte NoSQL-Datenbank mit JSON-ähnlichen Dokumenten.

Warum: Flexibles Schema, horizontale Skalierung, ideal für schnelle Entwicklung.

Quick Start

Installation:

macOS:

brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community

Docker:

docker run --name mongo -p 27017:27017 -d mongo

Verbinden:

mongosh

Oder MongoDB Atlas verwenden (Cloud): mongodb.com/atlas

Grundlegende Operationen:

use myapp
db.users.insertOne({ name: "John", email: "[email protected]" })
db.users.find()

Cheatsheet

BefehlBeschreibung
show dbsDatenbanken auflisten
use dbnameDatenbank wechseln
show collectionsCollections auflisten
db.col.insertOne({})Dokument einfügen
db.col.find()Alle Dokumente finden
db.col.findOne({})Ein Dokument finden
db.col.updateOne({}, {$set: {}})Dokument aktualisieren
db.col.deleteOne({})Dokument löschen

Gotchas

CRUD operations

// Insert
db.users.insertOne({ name: "John", email: "[email protected]" })
db.users.insertMany([{ name: "Jane" }, { name: "Bob" }])

// Find
db.users.find({ name: "John" })
db.users.find({ age: { $gt: 18 } })
db.users.find().limit(10).sort({ created: -1 })

// Update
db.users.updateOne(
  { email: "[email protected]" },
  { $set: { name: "Johnny" } }
)

// Delete
db.users.deleteOne({ email: "[email protected]" })

Query operators

// Comparison
{ age: { $gt: 18 } }    // greater than
{ age: { $gte: 18 } }   // greater than or equal
{ age: { $lt: 30 } }    // less than
{ age: { $in: [18, 21, 25] } }  // in array

// Logical
{ $and: [{ age: { $gt: 18 } }, { active: true }] }
{ $or: [{ name: "John" }, { name: "Jane" }] }

Indexes

db.users.createIndex({ email: 1 })  // Ascending
db.users.createIndex({ email: 1 }, { unique: true })
db.users.getIndexes()

Aggregation

db.orders.aggregate([
  { $match: { status: "completed" } },
  { $group: { _id: "$userId", total: { $sum: "$amount" } } },
  { $sort: { total: -1 } }
])

Next Steps