Node.js mongoose中的深度填充自引用模式
我在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,
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上存在一个公开问题,这基本上表明该模块不可能开箱即用。