在mongoose中深度填充自引用模式



我在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'
  }]
});

员工可以成为经理&可以有几个报告人。如果manager为空,则该员工被视为顶级员工。

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

到目前为止,我已经尝试使用populate () &mongoose-deep-populate模块,但我无法获得所需的输出。我想知道这是因为我有一个自我参考模型。也可能是我没有正确地使用这两个选项。

这是我用deep-populate模块尝试过的。它似乎在填充被报告者模型,但不是被报告者模型的报告树。I简而言之,它只填充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

最新更新