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モジュールを使用しようとしましたが、目的の出力を取得できません。私は自己参照モデルを持っているのではないかと思います。または、これら 2 つのオプションを適切に使用していない可能性があります。

これは私がdeep-populateモジュールで試したことです。レポーターモデルにデータを入力しているようですが、レポーターモデルのレポツリーではありません。つまり、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 に答える