MongoDB

Verbindung

# Direkt via Container
docker exec -it stoat-database-1 mongosh

Mit DB-Auswahl

docker exec -it stoat-database-1 mongosh revolt

Wichtige Datenbanken

| Datenbank | Inhalt |
|---|---|
| revolt | Alle Stoat-Daten (Users, Messages, Server...) |
| dreylo-profiles | Custom Profile API Daten |

Grundlegende MongoDB-Befehle

// DB wechseln
use revolt

// Collections anzeigen
show collections

// Alle Dokumente einer Collection
db.users.find().limit(5).pretty()

// Suchen
db.users.findOne({ email: "user@example.com" })

// Zählen
db.messages.countDocuments()

// Index-Infos
db.users.getIndexes()

Sessions (Login-Tokens)

use revolt

// Alle Sessions eines Users
db.sessions.find({ user_id: "USER_ID" })

// Abgelaufene Sessions löschen
db.sessions.deleteMany({ token_expiry: { $lt: new Date() } })

// Session-Token für API-Tests holen
db.sessions.findOne({ user_id: "01KHX9GDST3W7GMH7R4VH2QD8E" }).token

Dreylo-Profile Collection

use dreylo-profiles

// Alle Profile anzeigen
db.profiles.find().pretty()

// Profil eines Users
db.profiles.findOne({ user_id: "USER_ID" })

// Alle Folder-Daten
db.serverfolders.find().pretty()

Backup erstellen

# Alle Datenbanken dumpen
docker exec stoat-database-1 mongodump --out /data/backup

Aus Container kopieren

docker cp stoat-database-1:/data/backup ./mongodb-backup-$(date +%Y%m%d)

Restore

# Backup in Container kopieren
docker cp ./mongodb-backup stoat-database-1:/data/restore

Restore ausführen

docker exec stoat-database-1 mongorestore /data/restore

Performance-Prüfung

// Slow queries finden
db.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find().sort({ ts: -1 }).limit(5).pretty()

// Index-Nutzung prüfen
db.messages.explain("executionStats").find({ channel: "CHANNEL_ID" })