DEV Community

Cover image for Mongoose Schema Virtuals ,Difficulty Extreme level , Challange Yourself
swapnanilWebDeveloper
swapnanilWebDeveloper

Posted on

Mongoose Schema Virtuals ,Difficulty Extreme level , Challange Yourself

challenge your skills in Mongoose with a really difficult code

Here you will understand the virtuals in schema in depth

Enhance your skills

Challange yourself with all the difficulties...!!!

this code is also available in github , link is =>

her's the github link for code...


const mongoose = require('mongoose');

main().catch(err => console.log(err));

async function main() {
  await mongoose.connect('mongodb://127.0.0.1:27017/EmployeeData');

  const employeeSchema = new mongoose.Schema({
    name: {
      first: { type : String},
      last: {type : String},
    },
    address : {
        state : { type : String},
        district : { type : String },
        city : { type : String}
    },
    company : {
        name : { type : String},
        location : { type : String},
        domain : { type : String}
    }
  }, {
    virtuals: {
      fullName: {
        get() {
          return this.name.first + ' ' + this.name.last;
        }
      },
       employeeAddress: {
        get() {
          return "employee currently lives in "+this.address.state + ' // ' + this.address.district + ' // ' + this.address.city;
        }
      }
    }
  });

  employeeSchema.virtual('CompDetails').get(function() {
    return "curretnly working at : "+this.company.name + ' , at the : ' + this.company.location + 
                 ', branch  on the field of : ' + this.company.domain;
  });

  const Employee = mongoose.model('Employee', employeeSchema);

  await Employee.insertMany([
       {
         name : {
               first : "Mayuk",
               last : "Mukherjee",
           },
        address : {
            state : "Alabama",
            district : "California",
            city : "Ohio",
        },
        company : {
            name : "Infosys",
            location : "Denver",
            domain : "Java & SQL"
        }
       },
       {
        name : {
               first : "Suryendu",
               last : "Sarkar",
           },
        address : {
            state : "Texas",
            district : "Indiana",
            city : "Huston",
        },
        company : {
            name : "Amazon",
            location : "California",
            domain : "DataBase & web services"
        }
        },
        {
            name : {
                first : "Aninda",
                last : "Mukherjee",
            },
            address : {
               state : "Alaska",
               district : "Massachuttes",
               city : "Queens",
            },
            company : {
             name : "Microsoft",
             location : "NewYork",
             domain : "Software Development"
            }
        },
        {
            name : {
                first : "Souvik",
                last : "Chatterjee",
            },
            address : {
               state : "Boston",
               district : "Massachuttes",
               city : "Denver",
            },
            company : {
             name : "Adobe",
             location : "Ohio",
             domain : "MicroServices"
            }
        }
  ])

   const allEmployee = await Employee.find({});
   console.log(allEmployee);

 /*  console.log("full name is = "+allEmployee[0].fullName);
   console.log("full name is = "+allEmployee[0].employeeAddress);
   console.log("full name is = "+allEmployee[0].CompDetails); */

   // find that employee whose name.first is "Mayuk"....
   const nameRes1 = await Employee.find({ 'name.first' : 'Mayuk'});
   console.log(nameRes1);
   console.log("Employee's full name is = "+nameRes1[0].fullName);
   console.log(nameRes1[0].employeeAddress);
   console.log(nameRes1[0].CompDetails);

   // find that employee whose name.last is "Sarkar"....
   const nameRes2 = await Employee.find({ 'name.last' : 'Sarkar'});
   console.log(nameRes2);
   console.log("Employee's fullname is = "+nameRes2[0].fullName);
   console.log(nameRes2[0].employeeAddress);
   console.log(nameRes2[0].CompDetails);

   //find that employee whose address.district = "Massachuttes", city = "Queens"
   const nameRes3 = await Employee.find({ 'address.district' : 'Massachuttes', 'address.city' : 'Queens'});
   console.log(nameRes3);
   console.log("employee's fullname is = "+nameRes3[0].fullName);
   console.log(nameRes3[0].employeeAddress);
   console.log(nameRes3[0].CompDetails);

   // find that employee company.name = "Adobe" , company.domain = "MicroServices"
   const nameRes4 = await Employee.find({ 'company.name' : 'Adobe', 'company.domain' : 'MicroServices'});
   console.log(nameRes4);
   console.log("employee's fullanme is = "+nameRes4[0].fullName);
   console.log(nameRes4[0].employeeAddress);
   console.log(nameRes4[0].CompDetails);
}

Enter fullscreen mode Exit fullscreen mode

below is the expected output of virtuals ---

[
  {
    name: { first: 'Mayuk', last: 'Mukherjee' },
    address: { state: 'Alabama', district: 'California', city: 'Ohio' },
    company: { name: 'Infosys', location: 'Denver', domain: 'Java & SQL' },
    _id: new ObjectId('65c28ba3bea602014dc36d97'),
    __v: 0
  },
  {
    name: { first: 'Suryendu', last: 'Sarkar' },
    address: { state: 'Texas', district: 'Indiana', city: 'Huston' },
    company: {
      name: 'Amazon',
      location: 'California',
      domain: 'DataBase & web services'
    },
    _id: new ObjectId('65c28ba3bea602014dc36d98'),
    __v: 0
  },
  {
    name: { first: 'Aninda', last: 'Mukherjee' },
    address: { state: 'Alaska', district: 'Massachuttes', city: 'Queens' },
    company: {
      name: 'Microsoft',
      location: 'NewYork',
      domain: 'Software Development'
    },
    _id: new ObjectId('65c28ba3bea602014dc36d99'),
    __v: 0
  },
  {
    name: { first: 'Souvik', last: 'Chatterjee' },
    address: { state: 'Boston', district: 'Massachuttes', city: 'Denver' },
    company: { name: 'Adobe', location: 'Ohio', domain: 'MicroServices' },
    _id: new ObjectId('65c28ba3bea602014dc36d9a'),
    __v: 0
  }
]
[
  {
    name: { first: 'Mayuk', last: 'Mukherjee' },
    address: { state: 'Alabama', district: 'California', city: 'Ohio' },
    company: { name: 'Infosys', location: 'Denver', domain: 'Java & SQL' },
    _id: new ObjectId('65c28ba3bea602014dc36d97'),
    __v: 0
  }
]
Employee's full name is = Mayuk Mukherjee
employee currently lives in Alabama // California // Ohio
curretnly working at : Infosys , at the : Denver, branch  on the field of : Java & SQL
[
  {
    name: { first: 'Suryendu', last: 'Sarkar' },
    address: { state: 'Texas', district: 'Indiana', city: 'Huston' },
    company: {
      name: 'Amazon',
      location: 'California',
      domain: 'DataBase & web services'
    },
    _id: new ObjectId('65c28ba3bea602014dc36d98'),
    __v: 0
  }
]
Employee's fullname is = Suryendu Sarkar
employee currently lives in Texas // Indiana // Huston
curretnly working at : Amazon , at the : California, branch  on the field of : DataBase & web services
[
  {
    name: { first: 'Aninda', last: 'Mukherjee' },
    address: { state: 'Alaska', district: 'Massachuttes', city: 'Queens' },
    company: {
      name: 'Microsoft',
      location: 'NewYork',
      domain: 'Software Development'
    },
    _id: new ObjectId('65c28ba3bea602014dc36d99'),
    __v: 0
  }
]
employee's fullname is = Aninda Mukherjee
employee currently lives in Alaska // Massachuttes // Queens
curretnly working at : Microsoft , at the : NewYork, branch  on the field of : Software Development
[
  {
    name: { first: 'Souvik', last: 'Chatterjee' },
    address: { state: 'Boston', district: 'Massachuttes', city: 'Denver' },
    company: { name: 'Adobe', location: 'Ohio', domain: 'MicroServices' },
    _id: new ObjectId('65c28ba3bea602014dc36d9a'),
    __v: 0
  }
]
employee's fullanme is = Souvik Chatterjee
employee currently lives in Boston // Massachuttes // Denver
curretnly working at : Adobe , at the : Ohio, branch  on the field of : MicroServices

Enter fullscreen mode Exit fullscreen mode

MongoDB compass

Showing the data inserted

Top comments (3)

Collapse
 
swapnanilwebdeveloper profile image
swapnanilWebDeveloper

If you face problem to understand this code check out a simple code . Follow this link to my another post

simple code

Collapse
 
swapnanilwebdeveloper profile image
swapnanilWebDeveloper

This is a complex program of Mongoose virtuals . Here the beginners can face some problems . It will be though to understand it in the first try . Any one who has any kind of doubts and query they can ask me or comment on my page.

Collapse
 
swapnanilwebdeveloper profile image
swapnanilWebDeveloper

Please guys let me know if you face some problem and come to me for better explanations.
Image description