Latest news about Bitcoin and all cryptocurrencies. Your daily crypto news habit.
I’ve had some hard time when virtuals wasn’t showing up. Without digging deep into Mongoose, I quickly turned lean mode off, crafting a new technical debt. After a while, I decided to spend some to look into this particular issue.
(optional) A Quick Primer
This section is also available in my another article.
What is Lean mode in Mongoose?
When lean mode is enabled, all queries return plain JavaScript objects instead of Mongoose Document. In this case, Mongoose will never have to instantiate Mongoose Document from plain JS object, apply magic methods, etc. Neglecting all these overhead in Lean mode, it makes perfect sense to have lean enabled by default.
What is Virtual?
Virtuals are attributes derived during query, which the values are not actually persisted in MongoDB. Since virtual is one of Mongoose magic attributes, it is disabled by default.
Using The Mongoose Plugin— mongoose-lean-virtual
Thanks to the community, I discovered the official plugin — mongoose-lean-virtuals , which supports virtuals which preserving the behavior of lean mode.
In this article, I will be focusing on how to apply mongoose-lean-virtuals in a typical Feathers.js Mongoose service (generated with feathers-cli).
Install mongoose-lean-virtual
First of all, install it:
npm install --save mongoose-lean-virtuals
Defining Model
Suppose we are creating a user service, we define our model as:
In our model, we defined a virtual uid to return the Object ID of our user document. Then, we set the properties toObject and toJSON to show virtuals. To apply mongoose-lean-virtuals , we also add in line 20.
Defining Service
In user.service.js, we add {virtuals: true} as the value of lean in our service options (line 11).
Voila!
Try to consume your service, you should be able to see the virtuals now.
Performance Concern
According to Mongoose documentation, lean mode is enabled to enhance query performance. However, would applying mongoose-lean-virtuals affect the performance of our app?
I have done a simple profiling and have the results posted here. Feel free to check it out to understand the performance impact of mongoose-lean-virtuals.
If you find this article helpful, feel free to give me some đź‘Ź đź‘Ź đź‘Ź generously.
Enabling Virtuals In Mongoose Lean Mode (in a FeathersJs service) was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.
Disclaimer
The views and opinions expressed in this article are solely those of the authors and do not reflect the views of Bitcoin Insider. Every investment and trading move involves risk - this is especially true for cryptocurrencies given their volatility. We strongly advise our readers to conduct their own research when making a decision.