猫鼬,递归的等级群体

时间:2015-06-30 12:50:54

标签: node.js mongodb recursion mongoose populate

我有一个非常大的数据集,其中每个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;
}

关于如何填充层次结构的任何想法?

0 个答案:

没有答案