Mongoose SchemaType.prototype.set() API

The SchemaType.prototype.set() function of the Mongoose API is used to allow us to transform or manipulate data before it gets stored in MongoDB or before a query is executed

Syntax:

SchemaType.prototype.set()

Parameters: It accepts the following parameter as mentioned above and described below:

  • fn: It is a function that performs some operation on the data and returns the transformed value.

Return type: It returns the SchemaType object as a response.

Setting up Node.js Mongoose Module:

Step 1: Create a Node.js application using the following command:

npm init

Step 2: After creating the NodeJS application, Install the required module using the following command:

npm install mongoose

The below examples will demonstrate the Mongoose SchemaType.prototype.set() method.

Example 1: In this example, we will create a setter that will allow us to convert a name into uppercase before it gets stored in DB.

Javascript




const mongoose = require('mongoose')
  
// Database connection
mongoose.connect('mongodb://localhost:27017/query-helpers',
    {
        dbName: 'event_db',
        useNewUrlParser: true,
        useUnifiedTopology: true
    }, err => err ? console.log(err)
        : console.log('Connected to database'));
  
function toUpper(v) {
    return v.toUpperCase();
}
  
const personSchema = new mongoose.Schema({
    name: {
        type: String,
        set: toUpper
    },
    age: {
        type: Number,
    }
});
  
const personsArray = [
    {
        name: 'Luffy',
        age: 19
    },
    {
        name: 'Nami',
        age: 30
    },
    {
        name: 'Zoro',
        age: 35
    }
]
  
const Person = mongoose.model('Person', personSchema);
  
(async () => {
    await Person.insertMany(personsArray);
    const res = await Person.find();
  
    console.log({ res });
})()


Step to Run Application: Run the application using the following command from the root directory of the project:

node main.js

Output:

 

GUI Representation of the Database using MongoDB Compass:

 

Example 2: In this example, we will create a setter that will allow us to convert an age into a number before it gets stored in DB.

Javascript




const mongoose = require('mongoose')
  
// Database connection
mongoose.connect('mongodb://localhost:27017/query-helpers',
    {
        dbName: 'event_db',
        useNewUrlParser: true,
        useUnifiedTopology: true
    }, err => err ? console.log(err)
        : console.log('Connected to database'));
  
function helper(val) {
    if (typeof val === 'string') {
        val = Number(val)
    }
    return val;
}
  
  
const personSchema = new mongoose.Schema({
    name: {
        type: String,
    },
    age: {
        type: Number,
        set: helper
    }
});
  
const personsArray = [
    {
        name: 'Luffy',
        age: '19'
    },
    {
        name: 'Nami',
        age: '30'
    },
    {
        name: 'Zoro',
        age: '35'
    }
]
  
const Person = mongoose.model('Person', personSchema);
  
(async () => {
    await Person.insertMany(personsArray);
    const res = await Person.find();
  
    console.log({ res });
})()


Step to Run Application: Run the application using the following command from the root directory of the project:

node main.js

Output:

 

GUI Representation of the Database using MongoDB Compass:

 

Reference: https://mongoosejs.com/docs/api/schematype.html#schematype_SchemaType-set



Contact Us