Implementing Schema Validation
Step-by-Step Schema Validation Process
graph TD
A[Start] --> B[Define Validation Rules]
B --> C[Choose Validation Method]
C --> D[Configure Collection]
D --> E[Test Validation]
E --> F[Monitor and Refine]
1. Preparing the Environment
MongoDB Installation on Ubuntu 22.04
sudo apt-get update
sudo apt-get install -y mongodb
sudo systemctl start mongodb
mongo
2. Validation Rule Design
Example: Product Collection Validation
db.createCollection("products", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "price", "category"],
properties: {
name: {
bsonType: "string",
minLength: 2,
maxLength: 100
},
price: {
bsonType: "double",
minimum: 0,
maximum: 10000
},
category: {
enum: ["Electronics", "Clothing", "Books", "Furniture"]
}
}
}
},
validationLevel: "strict",
validationAction: "error"
});
3. Validation Configuration Options
Configuration |
Description |
Options |
validationLevel |
Determines validation scope |
strict, moderate |
validationAction |
Response to invalid documents |
error, warn |
4. Practical Validation Scenarios
User Registration Validation
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["username", "email", "password"],
properties: {
username: {
bsonType: "string",
pattern: "^[a-zA-Z0-9_]{3,16}$"
},
email: {
bsonType: "string",
pattern: "^[^@]+@[^@]+\\.[^@]+$"
},
password: {
bsonType: "string",
minLength: 8
}
}
}
}
});
5. Error Handling Strategies
graph TD
A[Validation Error] --> B{Error Type}
B --> |Document Rejection| C[Prevent Insertion]
B --> |Warning| D[Log Warning]
B --> |Partial Validation| E[Modify Document]
6. Advanced Validation Techniques
- Compound Validations
- Nested Document Validation
- Array Element Validation
- Custom Validation Functions
Best Practices
- Keep validation rules simple
- Use clear, descriptive error messages
- Balance strictness with flexibility
- Regularly review and update validation rules
Example: Complex Validation
db.createCollection("orders", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["customer", "items", "total"],
properties: {
customer: {
bsonType: "object",
required: ["name", "email"]
},
items: {
bsonType: "array",
minItems: 1,
items: {
bsonType: "object",
required: ["product", "quantity"]
}
},
total: {
bsonType: "double",
minimum: 0
}
}
}
}
});
LabEx recommends iterative approach to schema validation, continuously refining rules based on application requirements and real-world usage.