VirtualType
VirtualType()
VirtualType.prototype.applyGetters()
VirtualType.prototype.applySetters()
VirtualType.prototype.get()
VirtualType.prototype.set()
VirtualType()
Parameters:
options
«Object»[options.ref]
«String|Function» ifref
is not nullish, this becomes a populated virtual[options.localField]
«String|Function» the local field to populate on if this is a populated virtual.[options.foreignField]
«String|Function» the foreign field to populate on if this is a populated virtual.[options.justOne=false]
«Boolean» by default, a populated virtual is an array. If you setjustOne
, the populated virtual will be a single doc ornull
.[options.getters=false]
«Boolean» if you set this totrue
, Mongoose will call any custom getters you defined on this virtual[options.count=false]
«Boolean» if you set this totrue
,populate()
will set this virtual to the number of populated documents, as opposed to the documents themselves, usingQuery#countDocuments()
[options.match=null]
«Object|Function» add an extra match condition topopulate()
[options.limit=null]
«Number» add a defaultlimit
to thepopulate()
query[options.skip=null]
«Number» add a defaultskip
to thepopulate()
query[options.perDocumentLimit=null]
«Number» For legacy reasons,limit
withpopulate()
may give incorrect results because it only executes a single query for every document being populated. If you setperDocumentLimit
, Mongoose will ensure correctlimit
per document by executing a separate query for each document topopulate()
. For example,.find().populate({ path: 'test', perDocumentLimit: 2 })
will execute 2 additional queries if.find()
returns 2 documents.[options.options=null]
«Object» Additional options likelimit
andlean
.name
«String»
VirtualType constructor
This is what mongoose uses to define virtual attributes via Schema.prototype.virtual
.
Example:
const fullname = schema.virtual('fullname');
fullname instanceof mongoose.VirtualType // true
VirtualType.prototype.applyGetters()
Parameters:
value
«Object»doc
«Document» The document this virtual is attached to
Returns:
- «Any» the value after applying all getters
Applies getters to value
.
VirtualType.prototype.applySetters()
Parameters:
value
«Object»doc
«Document»
Returns:
- «Any» the value after applying all setters
Applies setters to value
.
VirtualType.prototype.get()
Parameters:
fn
«Function»
Returns:
- «VirtualType» this
Adds a custom getter to this virtual.
Mongoose calls the getter function with the below 3 parameters.
value
: the value returned by the previous getter. If there is only one getter,value
will beundefined
.virtual
: the virtual object you called.get()
on.doc
: the document this virtual is attached to. Equivalent tothis
.
Example:
const virtual = schema.virtual('fullname');
virtual.get(function(value, virtual, doc) {
return this.name.first + ' ' + this.name.last;
});
VirtualType.prototype.set()
Parameters:
fn
«Function»
Returns:
- «VirtualType» this
Adds a custom setter to this virtual.
Mongoose calls the setter function with the below 3 parameters.
value
: the value being set.virtual
: the virtual object you're calling.set()
on.doc
: the document this virtual is attached to. Equivalent tothis
.
Example:
const virtual = schema.virtual('fullname');
virtual.set(function(value, virtual, doc) {
const parts = value.split(' ');
this.name.first = parts[0];
this.name.last = parts[1];
});
const Model = mongoose.model('Test', schema);
const doc = new Model();
// Calls the setter with `value = 'Jean-Luc Picard'`
doc.fullname = 'Jean-Luc Picard';
doc.name.first; // 'Jean-Luc'
doc.name.last; // 'Picard'