Open In App

Mongoose SchemaType.prototype.set() API

Last Updated : 22 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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
    {
        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
    {
        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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads