【发布时间】:2018-05-20 00:46:56
【问题描述】:
我正在尝试对使用较新的虚拟填充功能(使用 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 部分放在下面......)。无论如何,我只会返回空数组。是不是可以与虚拟填充聚合?
const result = await Project.aggregate([
{ $match : { projectId: <id> } },
{ $lookup: {
from: 'tasks',
localField: 'projectId',
foreignField: 'projectId',
as: 'tasks'
},
{
$unwind: '$tasks'
}
}
]);
【问题讨论】:
标签: node.js mongodb mongoose mongoose-populate