簡體   English   中英

neo4j中的雙向遞歸

[英]Bidirectional recursion in neo4j

無法在線找到答案。 我想對蛋白質相互作用 map 進行上游和下游遞歸查詢。如果用戶輸入蛋白質(蛋白質“C”)並且深度 N=2,我想在相互作用 map 和調節中返回 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 *, 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

使用函數startNodeendNode 弄清楚了 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM