虚拟类型


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» 如果将其设置为 truepopulate() 将使用 Query#countDocuments() 将此虚拟类型设置为填充文档的数量,而不是文档本身。

    • [options.match=null] «Object|Function» 添加一个额外的匹配条件到 populate()

    • [options.limit=null] «Number»populate() 查询中添加一个默认的 limit

    • [options.skip=null] «Number»populate() 查询中添加一个默认的 skip

    • [options.perDocumentLimit=null] «Number» 出于遗留原因,limitpopulate() 结合使用可能会产生错误的结果,因为它只对每个要填充的文档执行一次查询。如果设置了 perDocumentLimit,Mongoose 将通过为每个文档执行单独的查询来确保每个文档的 limit 正确,以 populate() 填充。例如,.find().populate({ path: 'test', perDocumentLimit: 2 }) 将在 .find() 返回 2 个文档时执行 2 个额外的查询。

    • [options.options=null] «Object» 额外的选项,如 limitlean

  • 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'