Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
neo4j中的双向递归_Neo4j - Fatal编程技术网

neo4j中的双向递归

neo4j中的双向递归,neo4j,Neo4j,无法联机找到此问题的答案。我想对蛋白质相互作用图的上游和下游进行递归查询。如果用户输入一个蛋白质(蛋白质“C”)并且深度N=2,我想在交互作用图和调节中返回2个上游和2个下游蛋白质。然而,如果其上游匹配右侧的蛋白质“b”需要在返回表中位于第一位,如果其下游方向匹配左侧的蛋白质“a”需要在返回表中位于第一位。我该怎么做 例如,这是双向的,但有一半的行在第1列和第3列中顺序错误 MATCH p = (a:Protein { name:'C' })<-[:REGULATES*1..2]->

无法联机找到此问题的答案。我想对蛋白质相互作用图的上游和下游进行递归查询。如果用户输入一个蛋白质(蛋白质“C”)并且深度N=2,我想在交互作用图和调节中返回2个上游和2个下游蛋白质。然而,如果其上游匹配右侧的蛋白质“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
MATCH p=(a:Protein{name:'C'})(b:Protein)
带*,关系(p)为r
返回节点(p)[长度(p)-1]。名称为Protein1,r[length(p)-1]为调节,b.名称为Protein2
我只能通过两个调用和切换顺序或返回列来得到我想要的

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, 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, r[length(p)-1] as Regulates, nodes(p)[length(p)-1].name AS Protein2
MATCH p=(a:Protein{name:'C'})-[:调节*1..2]>(b:Protein)
带*,关系(p)为r
返回节点(p)[length(p)-1]。名称为Protein1,r[length(p)-1]为调节,length(p),b。名称为Protein2

MATCH p=(a:Protein{name:'C'})使用函数和。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)
MATCH p=(n:Protein{name:'C'})(b:Protein)
带*,关系(p)为rs
返回startNode(last(rs))。名称为Protein1,last(rs)。方向为regulated,endNode(last(rs))。名称为Protein2,长度(p)