我有一个包含“块”的树状结构,这些块通过“NEXT_BLOCK”或“BLOCK_CHILD”连接到其他块。一个节点最多可以有一个BLOCK_CHILD和一个NEXT_BLOCK,并且这可以递归地重复自身。
虽然我可以通过运行下面的密码从starter节点获得所有块,但我希望以特定的数据格式获得数据。
MATCH (n:Node {id: $nodeId})-[r:NEXT_BLOCK|BLOCK_CHILD*0..]-(b:BLOCK_ELEMENT|BLOCK_INLINE)
RETURN n, r, b
我需要有效地将这个数据树作为一个数组,其中每个“Next block”是数组中的下一个元素,而“BLOCK_CHILD”的所有部分(包括其下一个节点)都封装在一个子字段中,该子字段也是一个数组。因此,上面的例子将被给出为
[
{
id : "4fa9125.."
children : [{text: ""}]
},
{
id : "66fb771.."
children : [
{
id: "466a6a"
children: [{id: "5498a3"}]
},
{
id: "90753..."
children: []
},
]
},
{
id : "12258d5.."
children : [{id: "97b56a"}]
},
]
如果我的节点有更好的结构设计,组织仍然可以改变。这些需要正确排序,但顺序会经常改变。
谢谢你的帮助!
我尝试使用APOC.convertToTree作为下面的示例。
MATCH path = (n {id: "eecd1592-d41b-4b3c-aaa1-16562d808ecc"})-[r:BLOCK_CHILD|NEXT_BLOCK*0..]->(p)
WITH collect(path) AS paths
CALL apoc.convert.toTree(paths)
YIELD value
RETURN value;
我也尝试了一些结构上的改变,比如存储json对象,但是由于它经常被改变,块总是被交叉引用,所以我不想简单地将整个内容存储为字符串。
1条答案
按热度按时间5vf7fwbs1#
上次我做了这样的导出,我使用了
apoc.export.json.query
。该过程使用查询的结果并将其导出为JSON。根据您想要的JSON格式,您可能需要运行几个工具来删除额外的转义字符等(tr、sed等)。我相信我在上面运行了tr -d '\' file
来删除多余的反斜杠。