2017-02-20 85 views
1

我正在从mongodb .find()中检索记录,并尝试使用d3v4 .stratify()嵌套这些记录。不幸的是,我得到错误使用d3v4嵌套JSON .stratify()

Error: ambiguous: Product Line 1

我假设我误解了API documentation

虽然这个问题似乎接近this post,我不认为这是完全一样的。但是,我试图得到的结果是like this

有人可以帮助我理解如何正确使用.stratify()吗?或建议一个更简单的方法来做到这一点?

我的结果集(mongodb_data)不是很大(也许〜2500级的产品)。

我的平坦mongodb_data看起来像这样,

[ 
    { 
    "name": "Product Line 1", 
    "reference": "product 1.A identifier" 
    }, 
    { 
    "name": "Product Line 1", 
    "reference": "product 1.B identifier" 
    }, 
    { 
    "name": "Product Line 2", 
    "reference": "product 2.A identifier" 
    }, 
    { 
    "name": "Product Line 2", 
    "reference": "product 2.B identifier" 
    } 
]; 

所需分层/嵌套数据需要像这样,

{ 
"name": "Master Product Catalog", 
"children": [ 
      { 
       "name": "Product Line 1", 
       "children": [ 
          { "name": "product 1.A identifier" }, 
          { "name": "product 1.B identifier" } 
          ] 
      }, 
      { "name": "Product Line 2", 
       "children": [ 
          { "name": "product 2.A identifier" }, 
          { "name": "product 2.B identifier" } 
          ] 
      } 
      ] 
} 

我已经使用例如由API文档被如下,

var stratdata = d3.stratify() 
        .id(function(d) { return d.name; }) 
        .parentId(function(d) { return d.name; }) 
        (mongodb_data); 

回答

0

您的平面数据不代表分层结构。它不回答“产品系列1”或“产品系列2”父母是谁的问题?此外,您的name属性不会同时包含父级和子级信息(引用是父级,名称是子级)。 d3.stratify()之前,您的数据应该是这样的:

[{ 
    "reference": "Master Product Catalog", 
    "name": "" //<-- has no parent 
}, { 
    "reference": "Product Line 1", 
    "name": "Master Product Catalog" //<-- parent is master 
}, { 
    "reference": "Product Line 2", 
    "name": "Master Product Catalog" 
}, { 
    "name": "Product Line 1", 
    "reference": "product 1.A identifier" 
}, { 
    "name": "Product Line 1", 
    "reference": "product 1.B identifier" 
}, { 
    "name": "Product Line 2", 
    "reference": "product 2.A identifier" 
}, { 
    "name": "Product Line 2", 
    "reference": "product 2.B identifier" 
}]; 

运行代码:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script data-require="[email protected]" data-semver="4.0.0" src="https://d3js.org/d3.v4.min.js"></script> 
 
</head> 
 

 
<body> 
 
    <script> 
 
    var json = [{ 
 
     "reference": "Master Product Catalog", 
 
     "name": "" 
 
    }, { 
 
     "reference": "Product Line 1", 
 
     "name": "Master Product Catalog" 
 
    }, { 
 
     "reference": "Product Line 2", 
 
     "name": "Master Product Catalog" 
 
    }, { 
 
     "name": "Product Line 1", 
 
     "reference": "product 1.A identifier" 
 
    }, { 
 
     "name": "Product Line 1", 
 
     "reference": "product 1.B identifier" 
 
    }, { 
 
     "name": "Product Line 2", 
 
     "reference": "product 2.A identifier" 
 
    }, { 
 
     "name": "Product Line 2", 
 
     "reference": "product 2.B identifier" 
 
    }]; 
 

 
    var root = d3.stratify() 
 
     .id(function(d) { 
 
     return d.reference; 
 
     }) 
 
     .parentId(function(d) { 
 
     return d.name; 
 
     }) 
 
     (json); 
 

 
    console.log(root) 
 
    </script> 
 
</body> 
 

 
</html>

+0

嗯,有趣。它适用于我的