Neo4j的新手,我已经尝试了基于此处提出的类似问题的Cypher和APOC的各种方法,但没有运气,因为没有一种是排序树组合。假设我有一些分层数据只是一堆带有子节点的根节点,并且所有节点都具有属性' 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.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
答案 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