虛擬類型 (VirtualType)
VirtualType()
VirtualType.prototype.applyGetters()
VirtualType.prototype.applySetters()
VirtualType.prototype.get()
VirtualType.prototype.set()
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)» 如果您將此設定為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)» 因為歷史原因,populate()
的limit
可能會產生不正確的結果,因為它只對每個被填充的文檔執行單一查詢。如果您設定perDocumentLimit
,Mongoose 會透過為每個要populate()
的文檔執行單獨的查詢來確保每個文檔的limit
正確。例如,.find().populate({ path: 'test', perDocumentLimit: 2 })
如果.find()
返回 2 個文檔,將執行 2 個額外的查詢。[options.options=null]
«物件 (Object)» 額外選項,例如limit
和lean
。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'