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

时间:2014-01-21 01:25:22

标签: node.js mongodb 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);
     }
    });
   };

这适用于列出所有项目但不需要单个任务(100s中的编号)的导航元素。这很好但现在我需要在导航中包含一个任务数量的计数,所以我将其添加到我的模型中:

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:无法读取未定义的属性'length'

1 个答案:

答案 0 :(得分:1)

由于您要排除tasks,因此虚拟属性无法检查属性的length(因为它未定义)。

包含tasks,或将长度包含为架构的预先计算值。您可以在字段上使用$inc来更改新项目添加到任务数组中的长度(或直接设置它)。