1

我在猫鼬中有一个自引用员工模式。

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 为 null,则该员工被视为顶级员工。

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

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

这是我用deep-populate模块尝试过的。它似乎正在填充reportee 模型,而不是reportee 模型的repotree。简而言之,它仅填充 1 级记录

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

      });
    });

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

4

1 回答 1

1

为了回答我自己的问题,我正在使用mongoose-deep-populate库。

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

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

于 2015-07-09T08:54:48.063 回答