Attach a new virtual field after save using mongoose

This is my schema…

const personSchema = new Schema({
  firstName: String,
  lastName: String
});

This is my model…

const PersonModel = model('Persons', personSchema, 'persons');

This is my person object

const person = new PersonModel({
  firstName: 'Rick',
  lastName: 'Biruel'
});

When I save my object…

const result = await person.save();

…I wish my person object with a third virtual field called ‘fullName’ like this:

console.warn('result');
// result = {
//   firstName: 'Rick',
//   lastName: 'Biruel',
//   fullName: 'Rick Biruel'
// };

To achieve this result, I tried this to no avail….

personSchema.post('save', async function () {
  this.fullName = `${this.firstName} ${this.lastName}`;
});

P.S. No error occurs, but the third field ‘fullName’ doesn’t exist in my person object. The fullName field must not persist on database!

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You can achieve this using VirtualType, and you can also find an example that is very similar to your problem in Mongoose official documentation.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x