Я пытаюсь выполнить агрегирование схем Mongoose, в которых используется новая функция виртуального заполнения (с использованием Mongoose 4.13, Mongo 3.6).
Допустим, у меня есть следующие (упрощенные для целей иллюстрации) схемы:
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);
Запросы в Project и заполнение связанных задач отлично работают с использованием .populate (), например:
Project.find({projectId: <id>}).populate('tasks');
Но теперь я хотел бы суммировать часы по задачам по проектам (оставил часть $ sum ниже, кстати ...). Я получаю обратно только пустые массивы, несмотря ни на что. Разве нельзя агрегировать с виртуальным заполнением или?
const result = await Project.aggregate([
{ $match : { projectId: <id> } },
{ $lookup: {
from: 'tasks',
localField: 'projectId',
foreignField: 'projectId',
as: 'tasks'
},
{
$unwind: '$tasks'
}
}
]);