Package Exports
- mongoose-lean-virtuals
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mongoose-lean-virtuals) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
mongoose-lean-virtuals
Attach virtuals to the results of mongoose queries when using .lean()
Usage
const mongooseLeanVirtuals = require('mongoose-lean-virtuals');examples
It attaches virtuals to result of find, findOne, and findOneAndUpdate if lean
const schema = new mongoose.Schema({
name: String
}, { id: false });
schema.virtual('lowercase').get(function() {
return this.name.toLowerCase();
});
schema.plugin(mongooseLeanVirtuals);
const Model = mongoose.model('Test', schema);
return Model.create({ name: 'Val' }).
then(() => Promise.all([
// You **must** pass `virtuals: true` to `lean()`
Model.find().lean({ virtuals: true }),
Model.findOne().lean({ virtuals: true }),
Model.findOneAndUpdate({}, { name: 'VAL' }).lean({ virtuals: true })
])).
then(results => {
const [findRes, findOneRes, findOneAndUpdateRes] = results;
assert.equal(findRes[0].lowercase, 'val');
assert.equal(findOneRes.lowercase, 'val');
assert.equal(findOneAndUpdateRes.lowercase, 'val');
});
It lets you choose which virtuals to apply
If you specify a list of virtuals in lean(), this plugin will only
apply those virtuals. This lets you pick which virtuals show up.
const schema = new mongoose.Schema({
name: String
}, { id: false });
schema.virtual('lowercase').get(function() {
return this.name.toLowerCase();
});
schema.virtual('uppercase').get(function() {
return this.name.toUpperCase();
});
schema.plugin(mongooseLeanVirtuals);
const Model = mongoose.model('Test2', schema);
return Model.create({ name: 'Val' }).
then(() => Model.findOne().lean({ virtuals: ['uppercase'] })).
then(result => {
assert.equal(result.uppercase, 'VAL');
assert.ok(!result.lowercase);
});