0
0
MongodbHow-ToBeginner · 3 min read

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: true means the field can be empty without error.
  • Using required without specifying type causes schema errors.
  • Setting required on 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

OptionDescriptionExample
required: trueField must be present{ name: { type: String, required: true } }
required: falseField is optional{ age: { type: Number, required: false } }
required: functionCustom 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.