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" })