深入填充mongoose中的自引用模式

时间:2015-07-08 09:30:06

标签: 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,
     ref: 'Employee',
      default: null
  },
  reportee: [{
    type: Schema.Types.ObjectId,
    ref: 'Employee'
  }]

});

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

我需要根据这个模型创建层次结构。我正在努力产生所需的输出。

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

这是我尝试使用deep-populate模块的内容。它似乎是填充报告者模型而不是报告者模型的报告。我 n缩短其仅填充的1级记录。

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

      });
    });

请建议我如何审核所有员工层级?

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,我正在使用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