2015-12-14 69 views
1

在系譜中,我們使用DNA來查找匹配。 Y-DNA發現父系匹配。這是否一個Neo4j的查詢(其中RN是一個人的唯一標識符)是:Neo4j密碼查詢基於性別的不同關係

MATCH (n{RN:1}) match p=n-[r:father*..22]->m return m.RN as RN,m.fullname as FullName,m.sex as Sex,m.bd as BD,m.dd as DD,length(p) as generation,case when left(m.bd,4)>'1930' and rtrim(m.dd)='' then 'Y' else 'N' end as mtDNA_Candidate, reduce(srt2 ='|', q IN nodes(p)| srt2 + q.RN + '|') AS PathOrder order by generation desc,PathOrder desc

或者我們使用的母系匹配的線粒體DNA:

`MATCH (n{RN:1}) match p=n-[r:mother*..22]->m return m.RN as RN,m.fullname as FullName,m.sex as Sex,m.bd as BD,m.dd as DD,length(p) as generation,case when left(m.bd,4)>'1930' and rtrim(m.dd)='' then 'Y' else 'N' end as mtDNA_Candidate, reduce(srt2 ='|', q IN nodes(p)| srt2 + q.RN + '|') AS PathOrder order by generation desc,PathOrder desc` 

我的問題是相關到X染色體DNA。一位父親只給他的女兒一個X染色體,一位母親給所有的孩子一個。因此,我需要一個密碼查詢來獲取所有母親的信息,但只有在最近的一代中有一個女兒的時候才能得到父親的信息。如果後代有兒子,我就排除父親。我在用M和F的值的出生日期並不總是已知的節點屬性「性」,因此它不能被用來確定方向性

我想這一點,但得到一個錯誤:

`MATCH (n{RN:1}) match p=n-[r:mother*..22|father*..1]->m return m.RN as RN,m.fullname as FullName,m.sex as Sex,m.bd as BD,m.dd as DD,length(p) as generation,case when left(m.bd,4)>'1930' and rtrim(m.dd)='' then 'Y' else 'N' end as mtDNA_Candidate, reduce(srt2 ='|', q IN nodes(p)| srt2 + q.RN + '|') AS PathOrder order by generation desc,PathOrder desc` 
+0

什麼是錯誤信息? –

+0

你能描述一下你的數據模型嗎?你究竟在尋找什麼圖表? –

+0

帶有第三個查詢的錯誤消息是無效輸入'|':期望標識符字符,屬性映射或']'(第1行,第41列(偏移:40)) 「MATCH(n {RN:1})匹配p = n- [r:mother * .. 22 | father * .. 1] - > m將m.RN作爲RN,m.fullname作爲FullName,m.sex作爲Sex,m.bd作爲BD,m。 dd作爲DD,作爲代的長度(p),當左(m.bd,4)>'1930'和rtrim(m.dd)=''時的情況,則'Y',否則'N'結束爲mtDNA_Candidate,reduce(srt2 ='|',q IN節點(p)| srt2 + q.RN +'|')AS PathOrder order by generation desc,PathOrder desc「 ^ –

回答

1

[增訂]

[r:mother*..22|father*..1]語法是非法的。 Cypher查詢中的關係最多隻能有一個可變長度規範,並且在之後的關係類型必須爲。 (另外:請注意,[:father*..1][:father]相同)。

此查詢似乎在邏輯上等同於您嗎?

MATCH pf=(n { RN:1 })-[:father]->() 
MATCH pm=n-[:mother*..22]->() 
WITH [pf] + COLLECT(pm) AS paths 
UNWIND paths AS p 
WITH LENGTH(p) AS generation, NODES(p) AS ancestors 
WITH generation, ancestors, LAST(ancestors) AS m 
RETURN m.RN AS RN, m.fullname AS FullName, m.sex AS Sex, m.bd AS BD, m.dd AS DD, generation, 
    CASE WHEN left(m.bd,4)>'1930' AND rtrim(m.dd)='' THEN 'Y' ELSE 'N' END AS mtDNA_Candidate, 
    reduce(srt2 ='|', q IN ancestors | srt2 + q.RN + '|') AS PathOrder 
ORDER BY generation DESC, PathOrder DESC; 
+0

此錯誤消息是未知標識符「UNNAMED22」,我不明白 –

+0

我的查詢有錯誤。 '用pf + ...'應該是'WITH [pf] + ...'。我糾正了我的答案。它現在對你有用嗎? – cybersam