使用apoc.convert.toTree

时间:2017-05-23 03:07:38

标签: neo4j cypher

Neo4j的新手,我已经尝试了基于此处提出的类似问题的Cypher和AP​​OC的各种方法,但没有运气,因为没有一种是排序树组合。假设我有一些分层数据只是一堆带有子节点的根节点,并且所有节点都具有属性' name'。截至目前(通过下面的查询),当按名称显示结果时,我的数据类似于:

zxcv
  rtyu
asdf
  qwer
    wert
  bbbb
    fghj
    yuio

我可以添加哪些内容按名称排序,以便对整个树进行排序?

MATCH p=(n:Code)-[:HAS_CHILD*]->(m)
WHERE NOT ()-[:HAS_CHILD]->(n)
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) yield value
RETURN value

如果我使用SORT BY value.name它只会对根节点进行排序,因为这是返回的顶部。无法在收集之前弄清楚如何/在哪里对节点进行排序,或者当我这样做时,我无法弄清楚如何在之后进行收集。很高兴使用apoc.coll.sortNodesapoc.coll.sort等,但无法弄清楚如何使用它们。

更新

这有点接近但仍然只对根

进行排序
MATCH (n:Code)-[:HAS_CHILD*]->(m)
WHERE NOT ()-[:HAS_CHILD]->(n)
WITH n
ORDER BY n.name
MATCH p=(n:Code)-[:HAS_CHILD*]->(m)
WHERE NOT ()-[:HAS_CHILD]->(n)
WITH COLLECT (p) AS ps
CALL apoc.convert.toTree(ps) yield value
RETURN value

1 个答案:

答案 0 :(得分:1)

MATCH (n:Code)-[:HAS_CHILD*]->(m)
WHERE NOT (m)-[:HAS_CHILD]->()
WITH n, m
ORDER BY n.name, m.name
MATCH p=(n:Code)-[:HAS_CHILD*]->(m)
WHERE NOT ()-[:HAS_CHILD]->(n)
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) yield value
RETURN value
相关问题