Package Exports
- mongoose-lean-virtuals
- mongoose-lean-virtuals/index.js
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().
Security contact information
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
Usage
const mongooseLeanVirtuals = require('mongoose-lean-virtuals');
// Example schema
const userSchema = new mongoose.Schema({ name: String });
userSchema.virtual('lowercase').get(function() {
return this.name.toLowerCase();
});
// Now, the `lowercase` property will show up even if you do a lean query
userSchema.plugin(mongooseLeanVirtuals);
// Later
// You **must** pass `virtuals: true` to `lean()`, otherwise `lowercase`
// won't be in `res`
const res = await UserModel.find().lean({ virtuals: true });TypeScript
Mongoose's lean() function typings don't know about virtuals: true, so you need to explicitly set the type when calling lean().
This module exports a convenient VirtualsForModel helper type that returns the virtual property types for a given model.
The below example shows using VirtualsForModel along with lean<TypeOverride>().
import mongooseLeanVirtuals, { VirtualsForModel } from "mongoose-lean-virtuals";
interface ITest {
name: string
}
const testSchema = new mongoose.Schema(
{ name: { type: String, required: true } },
{
virtuals: {
nameUpper: {
get() {
return this.name.toUpperCase();
}
}
}
}
);
testSchema.plugin(mongooseLeanVirtuals);
const TestModel = mongoose.model('Test', testSchema);
TestModel.findOne().lean<ITest & VirtualsForModel<typeof TestModel>>({ virtuals: true }).orFail().then(doc => {
const name: string = doc.name;
const nameUpper: string = doc.nameUpper;
});