[英]How to call method defined in a mongoose schema while retriving complete list in a model?
我在 mongoose model 上定義了一個方法如下 -
PatientSchema.methods.getAge = function(){
let ageDifMs = (Date.now() - this.dateOfBirth.getTime());
let ageDate = new Date(ageDifMs);
let age = Math.abs(ageDate.getUTCFullYear() - 1970);
return age;
}
當我檢索該相關 model 的單個實例時,它工作正常。 現在我檢索多個實例時的問題如下 -
const patientList = await Patient.find({})
如何在 JS object 中添加新的鍵值對,其中值是使用 model 中定義的方法生成的。 我可以使用循環來做到這一點,但我想知道是否有任何優化的方式?
更新 - 正如@Milad Raeisi 所述,我使用虛擬機如下 -
PatientSchema.virtual('age').get(function () {
let temp = new Date(this.dateOfBirth)
let ageDifMs = (Date.now() - temp.getTime());
let ageDate = new Date(ageDifMs);
return Math.abs(ageDate.getUTCFullYear() - 1970);
})
同時設置mongoose.set('toJSON', { virtuals: true });
同樣,它對於單個實例非常有效,但對於多個實例返回 null。
我正在使用以下代碼來獲取患者名單 -
const patientList = await Patient.find({})
.sort({name:1})
.limit(limit)
.skip(skipIndex)
.select(['name', 'gender', 'age'])
.exec();
如果您真的想要一種有效的方法,您可以在聚合查詢中執行此操作,或者您可以將年齡存儲在某個緩存中並從那里讀取年齡,但通常您可以使用 mongoose 虛擬並在虛擬字段中計算年齡。
編輯:
不需要從 mongoose 中獲取年齡,因為它是一個虛擬字段,在 db 上不存在,而且您需要在 select 中獲取 dateOfBirth 才能計算 Z758D31F351CE11BF27C522F516CB4 中的年齡。
嘗試這個
const patientList = await Patient.find({})
.sort({name:1})
.limit(limit)
.skip(skipIndex)
.select(['name', 'gender', 'dateOfBirth'])
.exec();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.