Tree 带密码的自动多级树

Tree 带密码的自动多级树,tree,neo4j,cypher,Tree,Neo4j,Cypher,我目前有一个Neo4j模式:一个节点通过“内容”关系链接到另一个节点。比方说,我不知道我会有多少水平 现在,我有一个问题: MATCH (p:Keyword) OPTIONAL MATCH (p)-[:CONTENTS]->(p1) OPTIONAL MATCH (p1)-[:CONTENTS]->(p2) OPTIONAL MATCH (p2)-[:CONTENTS]->(p3) OPTIONAL MATCH (p3)-[:CONTENT

我目前有一个Neo4j模式:一个节点通过“内容”关系链接到另一个节点。比方说,我不知道我会有多少水平

现在,我有一个问题:

MATCH (p:Keyword) 
    OPTIONAL MATCH (p)-[:CONTENTS]->(p1) 
    OPTIONAL MATCH (p1)-[:CONTENTS]->(p2) 
    OPTIONAL MATCH (p2)-[:CONTENTS]->(p3)
    OPTIONAL MATCH (p3)-[:CONTENTS]->(p4)
        WITH p,p1,p2,p3,{uid: p4.uid, name: p4.name} as child4
        WITH p,p1,p2,{uid: p3.uid, name: p3.name , children: collect(child4)} as child3
        WITH p,p1,{uid: p2.uid, name: p2.name , children: collect(child3)} as child2
        WITH p,{uid: p1.uid, name: p1.name , children: collect(child2)} as child1
                WITH {uid: p.uid, name: p.name, children: collect(child1)} as child
RETURN {tree: collect(child)}
结果是我所需要的,但通过这种方式,我将结果限制在5个级别。在不添加更多“可选匹配”的情况下,如何自动多级设置此查询


感谢您的帮助:)

不完全理解您的查询所需的输出应该是什么

您需要通过使用量词修改关系规范来使用可变路径长度匹配:

编辑:


为了有一棵完整的树,我这样做。但在本例中,我需要一个分层输出。每个“父”必须有一个“子”子数组。例如:[{“uid”:“1”,“name”:“name 1”,“children”:[{“uid”:“2”,“name”:“name 2”},{“uid”:“3”,“name”:“name 3”,“children”:[{“uid”:“4”,“name”:“name 4”},{“uid”:“name 5”},{“uid”:“6”,“name”:“name 6”,“children”:[{“uid”:“7”,“name”:“name 7”}]}]}]谢谢。。。但输出不显示子级别。。。(对于每个“级别”,我想我需要一个“收集”子级别)级别==长度(路径)?长度(路径)似乎将所有子级(和子级*-子级)设置在同一级别。对于第一级,“children”=所有直接子级+thoses的子级+thoses的子级+。。。我只是希望这些信息像我的第一个查询一样按层次顺序保存……我不太明白。是否可以使用共享示例数据集并描述所需结果?
MATCH path=(p:Keyword)-[:CONTENTS*0..5]->(content) // match 0 to 5 CONTENTS hops
RETURN path, length(path) as len
ORDER BY len desc
LIMIT 1   // only proceed with longest path
MATCH path=(p:Keyword)-[:CONTENTS*0..4]->(content)-[:CONTENTS]->(child) 
RETURN content.uid, collect(child.uid) as children