如何解决neo4j中的双向递归
无法在线找到答案。我想在蛋白质相互作用图的上游和下游进行递归查询。如果用户输入蛋白质(蛋白质'C')且深度N = 2,我想在相互作用图和规则中返回2个上游和2个下游蛋白质。但是,如果其MATCH右侧的上游蛋白质'b'首先需要在返回表中排位,如果其下游方向,则匹配左侧的蛋白质'a'需要首先在返回表中排位。我该怎么办?
例如,这是双向的,但是一半的行在第1列和第3列中的顺序错误。
MATCH p = (a:Protein { name:'C' })<-[:REGULATES*1..2]->(b:Protein)
WITH *,relationships(p) as r
RETURN nodes(p)[length(p)-1].name AS Protein1,r[length(p)-1] as Regulates,b.name AS Protein2
我只能通过两个调用和切换顺序或RETURN列来获得所需的内容。
MATCH p = (a:Protein { name:'C' })-[:REGULATES*1..2]->(b:Protein)
WITH *,length(p),b.name AS Protein2
MATCH p = (a:Protein { name:'C' })<-[:REGULATES*1..2]-(b:Protein)
WITH *,relationships(p) as r
RETURN b.name AS Protein1,nodes(p)[length(p)-1].name AS Protein2
解决方法
使用功能startNode和endNode来解决。 last()和head()函数也很方便。
MATCH p = (n:Protein { name:'C' })<-[:REGULATES*1..3]->(b:Protein)
WITH *,relationships(p) as rs
RETURN startNode(last(rs)).name as Protein1,last(rs).direction as Regulates,endNode(last(rs)).name as Protein2,length(p)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。