Allows you to specify which virtuals fields should be returned in find queries when using lean queries.
Lean queries can be used to improve read only performance. Normally, this means that virtual fields will not be returned. mongoose-lean-virtuals allows you to specify that virtual properties should be included, even on lean queries. The plugin also allows you to specify which specific virtual fields should be returned. The syntax for that is quite verbose, and requires you to know which fields are real vs virtual. This plugin allows you to specify which fields you would like (real or virtual) using normal select
properties of a query, and then will make sure the lean fields are returned if this is a virtual query.
- The plugin has no effect on non-lean queries
- Queries can be set as lean using any style, e.g.
myQuery.lean()
,myQuery.setOptions({ lean: true })
,myQuery.lean({virtuals: true})
, etc. - If only virtual fields are present in the
select
statement, no real properties will be retrieved from the database. - Specifying a virtual field in the
select
statement will exclude non-specified virtual fields, even if lean is set to{virtuals: true}
(which would normally trigger all virtuals to be included).Model.find({}, 'virtual_key').lean()
is the same as.lean({ virtuals: ['virtual_key']})
. - If a query has only real fields selected, no virtual fields will be included in the query
const schema = new mongoose.Schema({ real_key: String });
schema.virtual('virtual_key').get(() => 'some virtual value');
schema.plugin(leanVirtuals);
schema.plugin(selectVirtuals);
// result will contain real_key and virtual_key
const result = await Model.findOne({}, 'real_key virtual_key').lean().exec();
npm install mongoose-select-virtuals mongoose-lean-virtuals
Tests written using ava
framework. Run them using:
npm test
Designed for use in node environments, currently no build process. Supports node 6 and above.
Please feel free to fork and submit pull requests
We use SemVer for versioning and np for to publish releases.
- Makinde Adeagbo - makinde (github)
This project is licensed under the ISC License - see the LICENSE.md file for details