我是Neo4j
的新手,目前正在玩这种树状结构:
黄色框中的数字是关系order
上名为CHILD_OF
的属性。
我的目标是
a)通过此属性管理同一级别的节点的排序顺序,而不是通过有向关系(例如LEFT
,RIGHT
或IS_NEXT_SIBLING
等)。< / p>
b)能够使用普通整数而不是order
属性的完整路径(即不像0001.0001.0002
那样维护。)
然而,我无法找到关于如何或是否可以递归查询图形以使其不断返回节点depth-first
的正确提示,但是对于每个级别的排序,请考虑order
关系中的财产。
我希望如果可能的话,它可能包括使用Cypher
的集合实用程序来匹配迭代它的完整路径,但我甚至还不足以发布一些好的起点。
问题
我对这个问题的答案所期望的并不一定是一个解决方案,而是暗示这是否是一种糟糕的方法,无论如何都会表现不佳。就Cypher
而言,我感兴趣的是,如果有一个实际的解决方案。
我对如何将其作为带有Java遍历或核心api的Neo4j服务器插件(这并不意味着它表现良好,但这是另一个主题)有一个大概的想法,所以这个问题真正针对设计和Cypher
方面。
答案 0 :(得分:1)
这可能有效:
match path = (n:Root {id:9})-[:CHILD_OF*]->(m)
WITH path, extract(r in rels(path) | r.order) as orders
ORDER BY orders
如果它抱怨排序数组然后计算一个数字,其中每个数字(或两个数字)是您的订单并按该数字排序
match path = (n:Root {id:9})-[:CHILD_OF*]->(m)
WITH path, reduce(a=1, r in rels(path) | a*10+r.order) as orders
ORDER BY orders