如何创build一个列出子文档长度的mongoose虚拟字段?

我有一个node.js REST的api路线,返回项目对象为json减去任务:

exports.list = function(req, res) { return Project.find(null,'-tasks',null,function(err, projects) { if (!err) { return res.json(projects); } else { return res.send(err); } }); }; 

这是为了用于列出所有项目但不需要单个任务的导航元素(这个数字在100年代)。 这个效果很好,但现在我需要在导航中包含任务数量,所以我将其添加到我的模型中:

 var ProjectSchema = Schema({ name : String, tasks : [{ name : String, state : String }] }, { toObject: { virtuals: true }, toJSON: { virtuals: true } }); ProjectSchema.virtual("taskCount").get(function(){ return this.tasks.length; }); 

但是我得到以下错误:TypeError:无法读取未定义的属性“长度”

因为你排除tasks ,虚拟属性不能检查属性的length (因为它没有定义)。

要么包含tasks ,要么将长度作为模式的预计算值包含在内。 你可以在字段中使用$inc来改变新的项目添加到任务数组(或直接设置)的长度。