如何创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
来改变新的项目添加到任务数组(或直接设置)的长度。