Node.js mongoose中的深度填充自引用模式

Node.js mongoose中的深度填充自引用模式,node.js,mongodb,mongoose,mongoose-populate,mongoose-plugins,Node.js,Mongodb,Mongoose,Mongoose Populate,Mongoose Plugins,我在mongoose中有一个自引用员工模式 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var Employee = new Schema({ name: String, description: { type: String, default: 'No description' }, manager: { type: Schema.Types.ObjectId,

我在mongoose中有一个自引用员工模式

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var Employee = new Schema({
  name: String,
  description: {
    type: String,
    default: 'No description'
  },
 manager: {
     type: Schema.Types.ObjectId,
     ref: 'Employee',
      default: null
  },
  reportee: [{
    type: Schema.Types.ObjectId,
    ref: 'Employee'
  }]

});
员工可以是经理,也可以有多个报告人。如果经理为空,则该员工将被视为顶级员工

我需要基于此模型创建层次结构。我正在努力产生期望的产出

到目前为止,我已尝试使用&module,但无法获得所需的输出。我想知道这是因为我有一个自我参照模型。或者可能是我没有正确使用这两个选项

这就是我用
deep-populate
模块所尝试的。它似乎是在填充报告对象模型,而不是报告对象模型的repotree。In仅填充1级记录。

Employee.deepPopulate(employees, 'reportee.reportee.reportee.reportee.reportee', function (err, _employee) {
      employees.forEach(function (employee) {

      });
    });

请建议我如何检索所有员工层次结构?

回答我自己的问题,我正在使用库

要使用它,我们需要安装模块:

npm install mongoose-deep-populate
//注册插件 var deepPopulate=require('mongoose-deep-populate'); Employee.plugin(deepPopulate)

然后使用以下代码:

Employee.deepPopulate(employees, 'reportee.reportee.reportee.reportee.reportee', function (err, _employee) {
      employees.forEach(function (employee) {

      });
    });

这将加载5个级别的报告对象,正如我们前面提到的
reportee.reportee.reportee.reportee.reportee

那么您想要什么呢?如果有人是首席执行官,那么每个报告人都会在整个公司中反复出现?我不确定这样的事情是否有用,只是想弄清楚你想要什么。是的,这就是我想要的。我要横渡到终点。根据要求,我们最多只有300名员工。因此,理想情况下,数据不应成为问题!!!我不是说我不会看它,但我强烈建议不要这样做。如果您试图在UI中构建一些“TreeView”,那么更好的方法是在打开每个“分支”时请求“子节点”,然后将该数据添加到打开的节点。或者mongoose和/或任何“插件”所能做的就是“烧穿”大量查询以获取每个员工和子节点。对于这么小的东西,您最好使用XML,而不是MongoDB或关系引擎。我不能说不,除非一次获取所有数据的性能真的很差。注意:mongoose deep populate Github上存在一个公开问题,这基本上表明该模块不可能开箱即用。