Um eine MongoDB-Datenbank auf Grundlage des NoSQL-Datenbankmodells für ein Projekt zur prädiktiven Wartung von Fahrzeugen zu erstellen, benötigen wir eine flexible, dokumentenbasierte Struktur. Das Modell soll in der Lage sein, verschiedene Datenarten wie Fahrzeuginformationen, Sensordaten und Wartungshistorien zu speichern. Hier ein Beispiel für die Modellierung mit den wichtigsten Collections (entsprechend den Tabellen einer relationalen Datenbank):
vehicles
){
"_id": "12345", // eindeutige ID des Fahrzeugs (kann Fahrzeug-Seriennummer oder generierte ID sein)
"vehicleType": "LKW",
"model": "TruckModelX",
"manufacturer": "TruckCo",
"yearOfManufacture": 2018,
"registrationNumber": "AB-123-CD",
"sensors": [
{
"sensorId": "sensor_01",
"sensorType": "temperature",
"installationDate": "2019-02-15"
},
{
"sensorId": "sensor_02",
"sensorType": "vibration",
"installationDate": "2019-02-15"
}
],
"maintenanceHistory": [
{
"date": "2023-01-10",
"description": "Routine-Wartung",
"cost": 200.00,
"serviceProvider": "Werkstatt XY"
},
{
"date": "2023-06-15",
"description": "Austausch der Bremsen",
"cost": 500.00,
"serviceProvider": "Werkstatt XY"
}
]
}
sensorData
){
"_id": "1", // eindeutige ID für den Sensordateneintrag
"sensorId": "sensor_01",
"vehicleId": "12345",
"timestamp": "2024-11-09T12:00:00Z",
"value": 80.3,
"unit": "Celsius"
}
maintenancePredictions
){
"_id": "56789", // eindeutige ID für die Prognose
"vehicleId": "12345",
"predictedIssue": "Ölwechsel erforderlich",
"predictedDate": "2024-12-01",
"severityLevel": "mittel",
"recommendation": "Überprüfung durch Fachpersonal",
"predictionModelVersion": "v1.2"
}
users
) (falls Benutzerkonten benötigt werden){
"_id": "user123",
"username": "techniker01",
"role": "Techniker",
"email": "techniker@firma.de",
"passwordHash": "hashed_password_here",
"permissions": ["viewVehicles", "addSensorData", "viewPredictions"]
}
Flexibilität von MongoDB: MongoDB ist dokumentenbasiert, was bedeutet, dass jede Collection Dokumente speichern kann, die flexibel strukturiert sind. Felder können verschachtelt sein, und unterschiedliche Dokumente innerhalb derselben Collection können unterschiedliche Felder enthalten.
vehicles
-Collection sind Sensoren als eingebettete Dokumente gespeichert, da sie direkt dem Fahrzeug zugeordnet sind und normalerweise nicht unabhängig abgerufen werden müssen.sensorData
-Collection ist als separate Collection dargestellt, da Sensordaten in großem Umfang anfallen können. Sie sind über vehicleId
und sensorId
mit den Fahrzeugen verknüpft.maintenancePredictions
, die mit Fahrzeugen durch vehicleId
verknüpft sind.Beziehungen: MongoDB verfolgt oft einen denormalisierten Ansatz (Daten werden gemeinsam gespeichert), um schnelle Lesezugriffe zu ermöglichen. Wenn Daten jedoch separat gespeichert werden sollen (wie Sensordaten), können Referenzierungen über IDs erfolgen.
vehicleId
, sensorId
oder Zeitstempel ein Index erstellt werden.Um die Collections in MongoDB anzulegen und Daten einzufügen, könnten Sie z. B. folgende MongoDB-Befehle nutzen:
Einfügen eines Fahrzeugs:
db.vehicles.insertOne({
_id: "12345",
vehicleType: "LKW",
model: "TruckModelX",
manufacturer: "TruckCo",
yearOfManufacture: 2018,
registrationNumber: "AB-123-CD",
sensors: [
{ sensorId: "sensor_01", sensorType: "temperature", installationDate: "2019-02-15" },
{ sensorId: "sensor_02", sensorType: "vibration", installationDate: "2019-02-15" }
],
maintenanceHistory: [
{ date: "2023-01-10", description: "Routine-Wartung", cost: 200.00, serviceProvider: "Werkstatt XY" }
]
});
Einfügen von Sensordaten:
db.sensorData.insertOne({
_id: "1",
sensorId: "sensor_01",
vehicleId: "12345",
timestamp: "2024-11-09T12:00:00Z",
value: 80.3,
unit: "Celsius"
});
Einfügen einer Wartungsprognose:
db.maintenancePredictions.insertOne({
_id: "56789",
vehicleId: "12345",
predictedIssue: "Ölwechsel erforderlich",
predictedDate: "2024-12-01",
severityLevel: "mittel",
recommendation: "Überprüfung durch Fachpersonal",
predictionModelVersion: "v1.2"
});
Dieses Datenbankmodell ist flexibel, leicht erweiterbar und eignet sich gut für das Speichern von Fahrzeugdaten, Sensordaten und anderen relevanten Informationen zur prädiktiven Wartung.
Hier ist ein Beispielskript in JavaScript, das Sie verwenden können, um eine MongoDB-Datenbank zu erstellen und die oben vorgestellten Collections mit Beispiel-Daten anzulegen. Dieses Skript nutzt die MongoDB-Shell-Syntax. Sie können es beispielsweise in der MongoDB-Shell oder mit einem Node.js-Skript ausführen.
// Verbindung zur Datenbank (wird automatisch erstellt, wenn sie nicht existiert)
use predictive_maintenance_db;
// Fahrzeuge Collection erstellen und Beispiel-Dokumente einfügen
db.vehicles.insertOne({
_id: "12345",
vehicleType: "LKW",
model: "TruckModelX",
manufacturer: "TruckCo",
yearOfManufacture: 2018,
registrationNumber: "AB-123-CD",
sensors: [
{ sensorId: "sensor_01", sensorType: "temperature", installationDate: "2019-02-15" },
{ sensorId: "sensor_02", sensorType: "vibration", installationDate: "2019-02-15" }
],
maintenanceHistory: [
{ date: "2023-01-10", description: "Routine-Wartung", cost: 200.00, serviceProvider: "Werkstatt XY" },
{ date: "2023-06-15", description: "Austausch der Bremsen", cost: 500.00, serviceProvider: "Werkstatt XY" }
]
});
// Sensordaten Collection erstellen und Beispiel-Dokumente einfügen
db.sensorData.insertOne({
_id: "1",
sensorId: "sensor_01",
vehicleId: "12345",
timestamp: "2024-11-09T12:00:00Z",
value: 80.3,
unit: "Celsius"
});
// Weitere Beispiel-Sensordaten hinzufügen
db.sensorData.insertOne({
_id: "2",
sensorId: "sensor_02",
vehicleId: "12345",
timestamp: "2024-11-09T12:05:00Z",
value: 0.02,
unit: "g" // Einheit für Vibration
});
// Wartungsprognosen Collection erstellen und Beispiel-Dokumente einfügen
db.maintenancePredictions.insertOne({
_id: "56789",
vehicleId: "12345",
predictedIssue: "Ölwechsel erforderlich",
predictedDate: "2024-12-01",
severityLevel: "mittel",
recommendation: "Überprüfung durch Fachpersonal",
predictionModelVersion: "v1.2"
});
// Benutzer Collection erstellen und Beispiel-Benutzer einfügen (optional)
db.users.insertOne({
_id: "user123",
username: "techniker01",
role: "Techniker",
email: "techniker@firma.de",
passwordHash: "hashed_password_here", // In der Praxis sollten Passwörter niemals als Klartext gespeichert werden!
permissions: ["viewVehicles", "addSensorData", "viewPredictions"]
});
// Indexe hinzufügen (optional aber empfohlen für Performance)
db.sensorData.createIndex({ vehicleId: 1 });
db.sensorData.createIndex({ sensorId: 1 });
db.maintenancePredictions.createIndex({ vehicleId: 1 });
print("Datenbank und Collections wurden erfolgreich erstellt!");
mongosh
) ein, um es auszuführen..js
-Datei und führen es mit folgendem Befehl aus:
mongosh <dateiname>.js
mongodb
oder mongoose
als Datenbank-Bibliothek ausführen.vehicleId
oder sensorId
verbessert die Performance bei Abfragen.Private repository - Only those with access to this repository can view it (https://github.com/harzmann/predictive-maintenance/blob/main/docs/MONGODB_FLEET_V2.md)
Autor: Jörg Harzmann
Dieser Inhalt ist unter einer CC BY-NC Lizenz veröffentlicht.