2017-05-31 175 views
0

這裏是我的查詢:暗號Neo4j的計數兩個節點之間的雙向關係的數量,避免重複的結果

MATCH (a:Person)-[:Sent]->(m2:message)-[r:forward]->(m1:message)<-[Sent]-(b:Person) 
    WITH a, b, COUNT(r) as count 
    RETURN a,b,count 

下面是結果示例:

a    b   count 
    name1   name2   2 
    name2   name1   3 

,我想要得到的總和在兩個節點之間轉發消息,因此我不希望像前面的示例那樣得到重複的結果

對於前面的示例,我想要這樣的結果:

a    b   count 
name1   name2   5 

我嘗試了許多查詢,但找不到任何解決方案或語法來獲得此結果。

有什麼辦法可以得到這種結果嗎? 預先感謝您的時間。

回答

1

這裏是你如何讓每一個應用對人與人之間轉發的郵件總數:

MATCH (a:Person)-[:Sent]->(:message)-[r:forward]-(:message)<-[:Sent]-(b:Person) 
WHERE ID(a) < ID(b) 
RETURN a, b, COUNT(r) as count; 

MATCH子句指定非定向模式爲forward關係,以便它匹配在兩個方向的關係。條款WHERE確保您只爲每對人獲得一行結果。 此外,此查詢一致地使用[:Sent],修復原始查詢中的拼寫錯誤。

+0

非常感謝你的幫助。 它解決了我的問題,但我需要從我的路徑中刪除方向以獲得正確的結果。 – Brenna

0

試試:

MATCH (a:Person)-[:Sent]->(m2:message)-[r:forward]->(m1:message)<-[:Sent]-(b:Person) 
WITH COLLECT(a) as rows, count(r) as count 
RETURN {a:properties(rows[0]), b:properties(rows[1]), count: count} 
+0

非常感謝您的熱心幫助。 現在,我得到了我想要的結果,但不幸的是我還是喜歡 '代碼 A B計數 名1名2 5 名2名1 5 ' – Brenna

+0

歡迎您重複的結果! :)如果此答案解決了您的問題,請記住[接受它](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)以告知其他人您的問題已解決,並幫助您的問題未來的觀衆。 –

+0

我仍在努力解決重複問題,LIMIT 1只給出一個結果,並跳過不同節點的所有其他結果 – Brenna