虚拟类型
VirtualType()VirtualType.prototype.applyGetters()VirtualType.prototype.applySetters()VirtualType.prototype.get()VirtualType.prototype.set()
VirtualType()
参数
options«Object»[options.ref]«String|Function» 如果ref不是空值,则此虚拟类型将成为一个 填充的虚拟类型[options.localField]«String|Function» 如果这是一个填充的虚拟类型,则为要填充的本地字段。[options.foreignField]«String|Function» 如果这是一个填充的虚拟类型,则为要填充的外键字段。[options.justOne=false]«Boolean» 默认情况下,填充的虚拟类型是一个数组。如果设置了justOne,则填充的虚拟类型将是一个单一文档或null。[options.getters=false]«Boolean» 如果将其设置为true,Mongoose 将调用在此虚拟类型上定义的任何自定义 getter[options.count=false]«Boolean» 如果将其设置为true,populate()将使用Query#countDocuments()将此虚拟类型设置为填充文档的数量,而不是文档本身。[options.match=null]«Object|Function» 添加一个额外的匹配条件到populate()[options.limit=null]«Number» 在populate()查询中添加一个默认的limit[options.skip=null]«Number» 在populate()查询中添加一个默认的skip[options.perDocumentLimit=null]«Number» 出于遗留原因,limit与populate()结合使用可能会产生错误的结果,因为它只对每个要填充的文档执行一次查询。如果设置了perDocumentLimit,Mongoose 将通过为每个文档执行单独的查询来确保每个文档的limit正确,以populate()填充。例如,.find().populate({ path: 'test', perDocumentLimit: 2 })将在.find()返回 2 个文档时执行 2 个额外的查询。[options.options=null]«Object» 额外的选项,如limit和lean。name«String»
VirtualType 构造函数
这就是 mongoose 用来通过 Schema.prototype.virtual 定义虚拟属性的东西。
示例
const fullname = schema.virtual('fullname');
fullname instanceof mongoose.VirtualType // true VirtualType.prototype.applyGetters()
参数
value«Object»doc«Document» 此虚拟类型所附加的文档
返回值
- «Any» 应用所有 getter 后 的值
将 getter 应用于 value。
VirtualType.prototype.applySetters()
参数
value«Object»doc«Document»
返回值
- «Any» 应用所有 setter 后 的值
将 setter 应用于 value。
VirtualType.prototype.get()
参数
fn«Function»
返回值
- «VirtualType» this
向此虚拟类型添加自定义 getter。
Mongoose 使用以下 3 个参数调用 getter 函数。
value:上一个 getter 返回的值。如果只有一个 getter,value将为undefined。virtual:您在上面调用.get()的虚拟对象。doc:此虚拟类型所附加的文档。等同于this。
示例
const virtual = schema.virtual('fullname');
virtual.get(function(value, virtual, doc) {
return this.name.first + ' ' + this.name.last;
}); VirtualType.prototype.set()
参数
fn«Function»
返回值
- «VirtualType» this
向此虚拟类型添加自定义 setter。
Mongoose 使用以下 3 个参数调用 setter 函数。
value:要设置的值。virtual:您正在调用.set()的虚拟对象。doc:此虚拟类型所附加的文档。等同于this。
示例
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' 
