Neo4j 使用apoc.convert.toTree时按属性排序分层数据
Neo4j新手,基于这里提出的类似问题,我尝试了使用Cypher和APOC的各种方法,但没有成功,因为没有一种是排序树组合。假设我有一些层次结构数据,它只是一组带有子节点的根节点,所有节点都有属性“name”。截至目前(使用下面的查询),按名称显示结果时,我的数据类似于:Neo4j 使用apoc.convert.toTree时按属性排序分层数据,neo4j,cypher,Neo4j,Cypher,Neo4j新手,基于这里提出的类似问题,我尝试了使用Cypher和APOC的各种方法,但没有成功,因为没有一种是排序树组合。假设我有一些层次结构数据,它只是一组带有子节点的根节点,所有节点都有属性“name”。截至目前(使用下面的查询),按名称显示结果时,我的数据类似于: zxcv rtyu asdf qwer wert bbbb fghj yuio 我可以在下面的查询中添加什么,这些查询将按名称排序,以便对整个树进行排序 MATCH p=(n:Code)-
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
如果我加上按值排序.name
,它只对根节点进行排序,因为根节点位于返回值的顶部。在收集之前,我无法确定如何/在何处对节点进行排序,或者在收集之后,我无法确定如何进行收集。乐于使用apoc.coll.sortNodes
,apoc.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
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