虛擬類型 (VirtualType)


VirtualType()

參數 (Parameters)
  • options «物件 (Object)»
    • [options.ref] «字串 (String)|函式 (Function)» 如果 ref 不是 null 或 undefined,這會變成一個填充虛擬欄位

    • [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)» 因為歷史原因,populate()limit 可能會產生不正確的結果,因為它只對每個被填充的文檔執行單一查詢。如果您設定 perDocumentLimit,Mongoose 會透過為每個要 populate() 的文檔執行單獨的查詢來確保每個文檔的 limit 正確。例如,.find().populate({ path: 'test', perDocumentLimit: 2 }) 如果 .find() 返回 2 個文檔,將執行 2 個額外的查詢。

    • [options.options=null] «物件 (Object)» 額外選項,例如 limitlean

  • name «字串 (String)»

VirtualType 建構子 (constructor)

這是 Mongoose 用來透過 Schema.prototype.virtual 定義虛擬屬性的方式。

範例 (Example)

const fullname = schema.virtual('fullname');
fullname instanceof mongoose.VirtualType // true

VirtualType.prototype.applyGetters()

參數 (Parameters)
  • value «物件 (Object)»
  • doc «文檔 (Document)» 這個虛擬欄位所附加到的文檔。

返回 (Returns)
  • «Any» 套用所有 getter 之後的值

將 getter 套用到 value


VirtualType.prototype.applySetters()

參數 (Parameters)
  • value «物件 (Object)»
  • doc «文檔 (Document)»
返回 (Returns)
  • «Any» 套用所有 setter 之後的值

將 setter 套用到 value


VirtualType.prototype.get()

參數 (Parameters)
  • fn «函式 (Function)»
返回 (Returns)
  • «VirtualType» this

為此虛擬欄位新增自訂的 getter。

Mongoose 會呼叫 getter 函式,並帶有以下 3 個參數。

  • value:先前 getter 返回的值。如果只有一個 getter,則 value 將會是 undefined
  • virtual:您呼叫 .get() 的虛擬物件。
  • doc:這個虛擬欄位所附加到的文檔。等同於 this

範例 (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

為此虛擬欄位新增自訂的 setter。

Mongoose 會呼叫 setter 函式,並帶有以下 3 個參數。

  • value:正在設定的值。
  • virtual:您正在呼叫 .set() 的虛擬物件。
  • doc:這個虛擬欄位所附加到的文檔。等同於 this

範例 (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'