2017-05-31 92 views
-2

在使用Cypher的Ne​​o4j中:Neo4j - 只有共同朋友的人

我需要找到PersonB與PersonA完全相同的朋友。

例子: 保羅知道彼得,安娜和邁克和其他人。 找到還有誰知道彼得,安娜和邁克以及其他人。

在此先感謝。

+5

Stackoverflow不是代碼編寫服務。請輸入一些輸入數據,預期輸出和您嘗試解決問題的方法。 –

+0

@Fabio Lamanna,如果你沒有給談話帶來任何有用的東西,你能不干涉嗎?我的問題中列出了你的三個「請求」中的兩個。 Stackoverflow幫助人們獲得幫助,我很高興Tezra幫助了我。 – pl80

+0

我根本沒有干涉,只是幫助你遵循[Stackoverflow指導方針](https://stackoverflow.com/help/on-topic)你應該問之前閱讀。我很高興有人做出了自己的努力,併爲你解決問題。 –

回答

1

這裏是如何做到這樣的查詢故障。

// Match side a 
MATCH (n1:Person)--(m:Person) 
WITH n1, COLLECT(m) as friends 
// Match side b 
MATCH (n2:Person)--(m:Person) 
WITH n1, n2, friends as friends1, COLLECT(m) as friends2 
// Filter out a-b same node or non identical friends lists. 
WHERE n1<>n2 AND SIZE(friends1) = SIZE (friends2) AND ALL (f in friends1 WHERE f in friends2) 
RETURN n1, n2 
+0

謝謝你,這工作得很好。我相信你可以通過取出「AND SIZE(friends1)= SIZE(friends2)」並添加「AND ALL(朋友2在朋友1的哪裏f)中」來獲得相同的結果。 n1擁有n2和n2的所有朋友都擁有n1的所有朋友。 – pl80

+1

@ pl80你想要SIZE檢查。它過濾掉friends1是friends2的子集,如果SIZE檢查失敗,Cypher可以跳過比較列表,這將爲您節省大量dbhits。 – Tezra

+0

好點。我遇到的另一個問題是,當我沒有指定n1是誰時,數據庫將耗盡內存,因爲我有30k關係,所以30k square = 900M對我的機器來說太大了。一旦我將n1縮小到一個人,查詢就可以快速工作:) – pl80