Cypher:按关系

时间:2015-08-08 12:04:49

标签: neo4j cypher graph-databases

我是Neo4j的新手,目前正在玩这种树状结构:

enter image description here

黄色框中的数字是关系order上名为CHILD_OF的属性。

我的目标是

a)通过此属性管理同一级别的节点的排序顺序,而不是通过有向关系(例如LEFTRIGHTIS_NEXT_SIBLING等)。< / p>

b)能够使用普通整数而不是order属性的完整路径(即不像0001.0001.0002那样维护。)

然而,我无法找到关于如何或是否可以递归查询图形以使其不断返回节点depth-first的正确提示,但是对于每个级别的排序,请考虑order关系中的财产。

我希望如果可能的话,它可能包括使用Cypher的集合实用程序来匹配迭代它的完整路径,但我甚至还不足以发布一些好的起点。

问题

我对这个问题的答案所期望的并不一定是一个解决方案,而是暗示这是否是一种糟糕的方法,无论如何都会表现不佳。就Cypher而言,我感兴趣的是,如果有一个实际的解决方案。

我对如何将其作为带有Java遍历或核心api的Neo4j服务器插件(这并不意味着它表现良好,但这是另一个主题)有一个大概的想法,所以这个问题真正针对设计和Cypher方面。

1 个答案:

答案 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