我有一个这样建模的文档:
{
_id: '1',
timeEntries: [
{ _id: '1',
hours: '1'
},
{ _id: '2',
hours: '2'
},
],
totalHours: 3
}
现在,每当我在文档中的timeEntries中添加一个timeEntry时,我也会在添加的timeEntry中将小时增加totalHours属性。
我希望能够在我的文档模型(虚拟字段?)上调用一个方法,而不是每次$ addToSet都增加一个,以从文档的timeEntries中获取总时数。
我该怎么做?
更新
此外,我的timeEntries实际上存储为引用数组。
示例:
[ 5bcf5e53e452b800134787dd, 5bcf5f42e452b800134787de ]
我需要一种方法来填充虚拟字段中的hours属性
模式:
const companyHourLogSchema = new Schema({
dateOpened: {
type: Date,
default: Date.now,
},
dateClosed: {
type: Date,
},
_id: {
type: mongoose.Schema.ObjectId,
auto: true,
},
company: {
type: mongoose.Schema.ObjectId,
ref: 'Company',
},
timeEntries: [{
type: mongoose.Schema.ObjectId,
ref: 'TimeEntry',
}],
title: {
type: String,
default: 'Current',
},
});
答案 0 :(得分:1)
更新
由于时间条目被保存为参考,因此您需要使用猫鼬populate首先获得条目
Model.find(/*your condition here*/).populate('timeEntries');
获取使用日志填充的timeEntries。
您可以按以下方式使用virtuals:
schema.virtual('totalHours').get(function () {
return this.timeEntries.reduce((agg,tiE) => agg + tiE.hours ,0);
});
然后您可以按以下方式使用它:
console.log(modelInstance.totalHours);