Abfrage- und Validierungsfehler behandeln
Fehler können auch auftreten, wenn Sie Daten abfragen oder wenn eingefügte Daten vordefinierten Regeln nicht entsprechen. In diesem Schritt untersuchen Sie einen Syntaxfehler bei der Abfrage und einen Datenvalidierungsfehler.
Sehen wir uns zunächst an, was passiert, wenn Sie einen nicht vorhandenen Abfrageoperator verwenden. Dies ist ein häufiger Tippfehler.
db.users.find({ name: { $invalidOperator: "John" } });
MongoDB gibt sofort einen Fehler zurück, da es $invalidOperator nicht erkennt.
MongoServerError[BadValue]: unknown operator: $invalidOperator
Als Nächstes untersuchen wir eine leistungsfähigere Funktion: die Schema-Validierung. Sie können Regeln definieren, denen Dokumente folgen müssen, um in eine Sammlung eingefügt oder aktualisiert zu werden. Erstellen wir eine neue Sammlung products mit einem Validator, der einen name (string) und einen price (number) erfordert.
db.createCollection("products", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "price"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
price: {
bsonType: "number",
description: "must be a number and is required"
}
}
}
}
});
Versuchen Sie nun, ein Dokument einzufügen, das dieses Schema verletzt, indem Sie den price als String anstelle einer Zahl angeben.
db.products.insertOne({ name: "Laptop", price: "1200" });
Die Operation schlägt mit einem MongoBulkWriteError fehl. Die Meldung Document failed validation gibt klar den Grund an und verhindert, dass fehlerhafte Daten in Ihre Datenbank gelangen.
MongoServerError: Document failed validation
...
Fügen Sie abschließend ein gültiges Dokument ein, das dem Schema entspricht.
db.products.insertOne({ name: "Laptop", price: 1200 });
Diese Operation ist erfolgreich, da das Dokument gültig ist.
{
"acknowledged": true,
"insertedId": ObjectId("...")
}
Die Schema-Validierung ist ein leistungsstarkes Werkzeug zur Durchsetzung der Datenkonsistenz direkt in der Datenbank.