mongoose虚拟填充和聚合

我正在尝试使用更新的虚拟填充function(使用Mongoose 4.13,Mongo 3.6)的Mongoose模式进行聚合。

可以说,我有以下(为了说明目的简化)模式:

const ProjectSchema = new mongoose.Schema({ projectId: Number, description: String }); ProjectSchema.virtual('tasks', { ref: 'Task', localField: 'projectId', foreignField: 'projectId' justOne: false ]); const TaskSchema = new mongoose.Schema({ taskId: Number, projectId: Number hours: Number }); const Project = mongoose.model('Project', ProjectSchema); const Task = mongoose.model('Task', TaskSchema); 

查询项目和填充相关的任务是正常使用.populate()如:

 Project.find({projectId: <id>}).populate('tasks'); 

但是现在我想总结一下按项目完成任务的时间(把$ sum部分留在下面)。 无论如何,我只能得到空arrays。 是不是可以与虚拟填充聚合?

 const result = await Project.aggregate([ { $match : { projectId: <id> } }, { $lookup: { from: 'tasks', localField: 'projectId', foreignField: 'projectId', as: 'tasks' }, { $unwind: '$tasks' } } ]); 

虚拟填充将不能用于聚合,因为“返回的文档是纯javascript对象,不是mongoose文档(因为可以返回任何forms的文档)。”(c),文档中的更多信息 – Mongoose聚合