neo4j 查找循环引用的密码查询

sulc1iza  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(109)

举个例子:http://console.neo4j.org/?id=qzjrxu,我该如何标识具有返回到起始节点的关系的节点?
IE:joe -> bill -> tom -> joe AND matt -> matt
谢谢你的帮助

ds97pgxw

ds97pgxw1#

对于中小型图,这应该返回遭受循环引用的节点和路径本身:

MATCH (e)
WHERE SIZE((e)<-[:ManagedBy]-()) <> 0 
AND SIZE(()<-[:ManagedBy]-(e)) <> 0
MATCH path = (e)<-[:ManagedBy*]-(e) 
RETURN e, path

编辑
我做了一个小小的修改,首先过滤掉没有传入和传出的节点:ManagedBy关系,这些节点永远不会有循环。
此外,强烈建议使用标签将处理的节点减少到最小集合。

h6my8fg2

h6my8fg22#

根据你的问题和图的大小,你可以尝试apoc扩展中的apoc.nodes.cycles
Documentation of that function
有了它,你可以运行这样的东西:

MATCH (e)
WITH collect(e) AS e_list
CALL apoc.nodes.cycles(e_list, {relTypes: ['XYZ'], maxDepth: 100}) 
YIELD path RETURN path

最好通过过滤等方式预先减少节点数量,特别是对于大型数据库。

相关问题