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

Nod*_*aut 5 mongoose mongodb node.js

我有一个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);
     }
    });
   };
Run Code Online (Sandbox Code Playgroud)

这旨在用于列出所有项目但不需要单个任务(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;
});
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:TypeError:无法读取未定义的属性"length"

Wir*_*rie 1

因为您排除了tasks,所以虚拟属性无法检查该length属性的 (因为它未定义)。

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