举个例子:http://console.neo4j.org/?id=qzjrxu,我该如何标识具有返回到起始节点的关系的节点?IE:joe -> bill -> tom -> joe AND matt -> matt谢谢你的帮助
ds97pgxw1#
对于中小型图,这应该返回遭受循环引用的节点和路径本身:
MATCH (e) WHERE SIZE((e)<-[:ManagedBy]-()) <> 0 AND SIZE(()<-[:ManagedBy]-(e)) <> 0 MATCH path = (e)<-[:ManagedBy*]-(e) RETURN e, path
编辑我做了一个小小的修改,首先过滤掉没有传入和传出的节点:ManagedBy关系,这些节点永远不会有循环。此外,强烈建议使用标签将处理的节点减少到最小集合。
h6my8fg22#
根据你的问题和图的大小,你可以尝试apoc扩展中的apoc.nodes.cycles。Documentation of that function有了它,你可以运行这样的东西:
apoc.nodes.cycles
MATCH (e) WITH collect(e) AS e_list CALL apoc.nodes.cycles(e_list, {relTypes: ['XYZ'], maxDepth: 100}) YIELD path RETURN path
最好通过过滤等方式预先减少节点数量,特别是对于大型数据库。
2条答案
按热度按时间ds97pgxw1#
对于中小型图,这应该返回遭受循环引用的节点和路径本身:
编辑
我做了一个小小的修改,首先过滤掉没有传入和传出的节点:ManagedBy关系,这些节点永远不会有循环。
此外,强烈建议使用标签将处理的节点减少到最小集合。
h6my8fg22#
根据你的问题和图的大小,你可以尝试apoc扩展中的
apoc.nodes.cycles
。Documentation of that function
有了它,你可以运行这样的东西:
最好通过过滤等方式预先减少节点数量,特别是对于大型数据库。