我有一个neo4j数据库,有两种类型的节点标签:person和email。一个email节点总是通过关系'EMAIL_FROM'和'EMAIL_TO'连接两个person节点,这样可以查询关系如下:
match (p1:Person)-[:EMAIL_FROM]->(:Email)-[:EMAIL_TO]->(p2:Person) return p1, p2
字符串
我试着写一个可变长度的关系查询,它从某个人节点开始,找到所有其他人节点,可以通过中间电子邮件节点到达。这是我尝试的:
match (p1:Person where p1.name='Jeff')-[:EMAIL_FROM*]->(:Email)-[:EMAIL_TO*]->(p2:Person) return p1, p2
型
不幸的是,这并不像我想象的那样工作,并且通过迭代模式一次,只能从'Jeff'节点直接返回,但随后它停止了,尽管我知道在第一次迭代中到达的节点本身具有传出的'EMAIL_FROM'关系。
1条答案
按热度按时间e0uiprwp1#
假设你想持续跟踪发送电子邮件的模式,你可以使用量化的路径模式来做到这一点:
字符串
这将重复模式的最后一部分,下限为1,没有上限。对于任何非平凡的图形,这可能无法完成,并且您可能会遇到堆问题。我们建议如果可能的话设置上限。
另一种方法是使用APOC过程,即路径浏览器过程,因为这些过程在查找不同的可达节点方面可能更有效。
型
这将重复传出的:EMAIL_FROM和:EMAIL_TO关系,仅返回:Person节点,并且此过程使用的唯一性应仅返回不同的结束节点。