虚拟类型
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'