How to Use Required in Mongoose Schema for Validation
In Mongoose, use the
required option in your schema definition to make a field mandatory. For example, { name: { type: String, required: true } } ensures the name field must be provided when creating a document.Syntax
The required option is used inside a schema field definition to enforce that the field must have a value when saving a document.
It can be set as true for simple mandatory fields or as a function or custom message for advanced validation.
javascript
const schema = new mongoose.Schema({ fieldName: { type: String, required: true } });
Example
This example shows a simple Mongoose schema with a required name field. Trying to save a document without name will cause a validation error.
javascript
const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true }, age: Number }); const User = mongoose.model('User', userSchema); async function run() { await mongoose.connect('mongodb://localhost:27017/testdb'); try { const user = new User({ age: 30 }); // Missing required 'name' await user.save(); } catch (error) { console.log('Validation Error:', error.message); } await mongoose.disconnect(); } run();
Output
ValidationError: User validation failed: name: Path `name` is required.
Common Pitfalls
- Forgetting to set
required: truemeans the field can be empty without error. - Using
requiredwithout specifyingtypecauses schema errors. - Setting
requiredon nested objects requires careful schema design.
Always ensure required is inside the field definition object.
javascript
const wrongSchema = new mongoose.Schema({ name: String, email: String }); // This does NOT enforce required const correctSchema = new mongoose.Schema({ name: { type: String, required: true }, email: { type: String, required: true } });
Quick Reference
| Option | Description | Example |
|---|---|---|
| required: true | Field must be present | { name: { type: String, required: true } } |
| required: false | Field is optional | { age: { type: Number, required: false } } |
| required: function | Custom condition for required | { email: { type: String, required: () => someCondition } } |
| required: 'message' | Custom error message | { name: { type: String, required: 'Name is required' } } |
Key Takeaways
Use
required: true inside a schema field to make it mandatory.Missing a required field causes a validation error when saving documents.
Always define
type along with required in schema fields.You can customize the required condition or error message using functions or strings.
Check your schema carefully to avoid common mistakes like placing
required outside the field object.