我有一个非常大的数据集,其中每个Item都有一个带有hierarchy
属性的children
字段,该属性是对其他Items的引用数组。我希望得到所有顶级父项,并将孩子一直填充到叶子中。
Item = new Schema({
...,
hierarchy: {
children: [{
type: mongoose.Schema,
ref: 'Item'
}],
...
})
填充仅填充一个级别,并且不会继续在树上继续。我也试过mongoose-deep-populate但是无法让它发挥作用。我可以写一个递归函数来填充所有字段吗?我的一个想法是写下这样的东西:
items = _.map(items, function(item){
return populateChildren(item);
});
function populateChildren(item){
if(item.hierarchy && item.hierarchy.children && item.hierarchy.children.length > 0){
item.hierarchy.children = _.map(item.hierarchy.children, function(child){
console.log(count++, child);
return Item.findById(child).exec(function(err, child){
return populateChildren(child);
})
});
}
return item;
}
关于如何填充层次结构的任何想法?