我已经加载了DNA SNP的分层树(DAG)。我想确定最低共同的祖先。
此查询有效,产生单个正确的节点:
Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-BY13828'})
match path=(n)-[:SNPParent*..99]->(MRCA)<-[:SNPParent*..99]-(m)
return MRCA.SNP
但是,这个没有结果:
Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-S25289'})
match path=(n)-[:SNPParent*..99]->(MRCA)<-[:SNPParent*..99]-(m)
return MRCA.SNP
即使两个查询都寻求两个产生节点的祖先,其中一些节点是共享的:
MATCH p=(n:SNPNode{SNP:'R-Z11'})-[r:SNPParent*..66]->(m) RETURN m.SNP
m.SNP
R-Z338
R-Z8
R-Z7
R-Z2
R-Z345
R-Z27
R-Z30
R-Z9
R-L48
R-Z301
R-Z381
R-U106
R-L151
R-L51
R-L23
R-M269
R-P297
R-L389
R-L754
R-M343
和
MATCH p=(n:SNPNode{SNP:'R-Z25289'})-[r:SNPParent*..66]->(m) RETURN m.SNP
m.SNP
R-S16701
R-S1774
R-Z341
**R-Z11**
R-Z338
R-Z8
R-Z7
R-Z2
R-Z345
R-Z27
R-Z30
R-Z9
R-L48
R-Z301
R-Z381
R-U106
R-L151
R-L51
R-L23
R-M269
R-P297
R-L389
R-L754
R-M343
似乎问题是R-Z11在第二个查询的路径中并且本身就是祖先。换句话说,有时LCA处于最短路径的末端。有没有办法解决这个问题,以便R-Z11返回的结果是否在最短的路径中?
答案 0 :(得分:0)
我认为您需要确保您的可变长度路径的下限为0(当您省略下限时,就像在当前查询中一样,它默认为1)。这将使起始节点和结束节点可以被视为与MRCA
的匹配。
Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-S25289'})
match path=(n)-[:SNPParent*0..99]->(MRCA)<-[:SNPParent*0..99]-(m)
return MRCA.SNP
答案 1 :(得分:0)
以下是有效的查询:
match p=(n:SNPNode{SNP:'R-Z11'})<-[:SNPChild*0..99]-(MRCA:SNPNode)-[:SNPChild*0..99]->(m:SNPNode{SNP:'R-BY13828'})
return MRCA.SNP
或者,要获得具有布尔标志的最低共同祖先(MRCA):
match p=(n:SNPNode{SNP:'R-Z11'})<-[:SNPChild*0..99]-(MRCA:SNPNode)-[:SNPChild*0..99]->(m:SNPNode{SNP:'R-BY13828'}) unwind(nodes(p)) as pn
return case when pn.SNP=MRCA.SNP then True else False end as MRCA,pn.SNP
使用此输出
MRCA SNP
FALSE R-Z11
FALSE R-Z338
TRUE R-Z8
FALSE R-BY13828