4.8 KiB
4.8 KiB
Migration zu neuer Datenbank-Struktur
Datum: 27. März 2026
Ziel
Migration von Multi-Sensor-DB (PM + THP + Radiation) zu fokussierter DB (nur Radiation + THP)
Änderungen
Entfernt:
- ❌ PM (Feinstaub) Sensoren komplett
- ❌
problemsensorsCollection - ❌
mapdataCollection (ersetzt durchproperties.values) - ❌ Separate
data_<sid>Collections
Neu:
- ✅ Zentrale
radioactivity_sensorsCollection - ✅ Zentrale
thp_sensorsCollection - ✅ Aktuelle Werte in
properties.values - ✅ Name als Array mit Historie
- ✅ Vereinfachte Location-Struktur
Beibehalten (auskommentiert):
- 💤 AKW-Funktionalität (für spätere Verwendung)
Bearbeitete Dateien
✅ Abgeschlossen
-
✅ routes/fsdata.js
- Radiation:
data_<sid>→radioactivity_sensors - THP:
data_<sid>→thp_sensors - properties.name als Array handhaben
- PM-Funktionen auskommentiert (movAvgSDSWeek, calcMinMaxAvgSDS, isPM, getStatistics)
- Radiation:
-
✅ routes/utilities.js
- PM-Teile aus calcMovingAverage entfernt
- Unterstützung für neue
valuesStruktur hinzugefügt datetime.$dateFormat-Handling
-
✅ routes/apidata.js
- getAPIdata(): Type-basierte Collection-Auswahl (radioactivity_sensors/thp_sensors)
- getAPIprops(): name Array, location.country statt address
- getApiCities(): PM-Filter entfernt, type-basiert
- PM-Funktionen auskommentiert (getAPIalldata, isPM)
-
✅ routes/mapdata.js
- getaktdata(): properties Collection statt mapdata
- properties.values für aktuelle Werte
- location.loc statt location
- indoor als Number (0/1)
- getRegionSensors(): PM-Filter entfernt
- AKW-Funktionen auskommentiert (getakwdata)
-
✅ docs/MongoDB_Struktur.md
- THP-Struktur dokumentiert
- Neue Collections beschrieben
- Migrations-Anleitungen hinzugefügt
Wichtige Änderungen im Detail
1. Collections
- ❌
data_<sid>(tausende separate Collections) - ✅
radioactivity_sensors(eine zentrale Collection) - ✅
thp_sensors(eine zentrale Collection) - ❌
mapdataCollection - ✅ Aktuelle Werte jetzt in
properties.values
2. Properties-Struktur
name: String → Array von {name, since}location.address: Objekt → nurlocation.country: Stringindoor: Boolean → Number (0/1)- Neu:
location.id,location.exact_loc,location.since - Neu:
type: "radioactivity"zur Typ-Identifikation - Neu:
valuesObjekt mit aktuellen Messwerten
3. Zeitstempel
- Alt:
datetime: Date - Neu:
datetime: { $date: Date } - Beide Formate werden jetzt unterstützt
4. Query-Änderungen
- Sensor-ID-Filter:
sensorid: sidstatt Collection-Name - Zeitstempel-Filter:
'datetime.$date'stattdatetime - Messwerte-Zugriff:
values.counts_per_minutestattcounts_per_minute - Location-Zugriff:
location.locstattlocation(für GeoJSON)
5. Indizes (müssen erstellt werden!)
db.radioactivity_sensors.createIndex({ sensorid: 1, "datetime.$date": 1 });
db.radioactivity_sensors.createIndex({ "datetime.$date": -1 });
db.thp_sensors.createIndex({ sensorid: 1, "datetime.$date": 1 });
db.thp_sensors.createIndex({ "datetime.$date": -1 });
db.properties.createIndex({ type: 1 });
db.properties.createIndex({ "location.loc": "2dsphere" });
Nächste Schritte
- Datenbank-Verbindung: Environment-Variablen für neue DB setzen
- Indizes erstellen: Obige Indizes in MongoDB anlegen
- Testen: Alle Funktionen durchTesten
- AKW-Features: Bei Bedarf auskommentierte AKW-Funktionen reaktivieren
Bekannte Einschränkungen
othersensorsArray in properties wird möglicherweise nicht mehr gefüllt- Stadt-Namen (Stadt-basierte Queries) funktionieren möglicherweise nicht mehr
- PM-bezogene API-Endpunkte geben Fehler zurück
- AKW-Funktionalität ist auskommentiert
Bugfixes nach Migration
27.03.2026 - Frontend Name-Handling
Problem: Uncaught TypeError: data.name.startsWith is not a function
- Frontend erwartete name als String, erhielt aber Array Lösung:
- routes/fsdata.js: getSensorProperties konvertiert name-Array zu String für Frontend
- public/js/global.js: holAddress auf neue location.country Struktur angepasst
27.03.2026 - MongoDB datetime.$date Query-Fehler
Problem: MongoServerError: FieldPath field names may not start with '$'
- MongoDB interpretiert
$datein'datetime.$date'als Operator, nicht als Feldname Lösung: - Alle Queries auf direktes
datetimeFeld umgestellt (BSON Date) - Betroffene Funktionen:
- routes/fsdata.js: readRadiationMovingAverage, readRadiationAverages, readClimateAverages
- routes/apidata.js: getAPIdataSensor
- utilities.js bleibt unverändert (behandelt beide Formate bei Datenverarbeitung) Hinweis: Datenbank muss datetime als BSON Date speichern, nicht als verschachteltes Objekt