2017-04-08 85 views
-1

我有具有name和id屬性的節點。這些節點與其他節點有朋友關係。如{約翰} - [朋友] - > {保羅},{約翰} - [朋友] - > {何塞},{何塞} - [朋友] - > {保羅}查找與Neo4j中的輸入節點有特定關係的節點

創建用戶

session.run("CREATE (a:User {name: {name}, id: {id}})", 
      parameters("name", name, "id", id)); 

創建關係

session.run("MATCH (a:User),(b:User) WHERE a.id = {node1} AND b.id = {node2} CREATE (a)-[r:FRIENDS]->(b)", 
      parameters("node1", id1, "node2", id2)); 

現在我正在尋找查詢約翰的朋友,這應該列出我保羅和何塞。我怎麼做 ?嘗試了下面,並得到空的結果。無法弄清楚爲什麼

session.run("MATCH (a:User{id:{id}})<-[:FRIEND]-(actor) RETURN a.id", 
      parameters("id", user)); 

感謝您的幫助

+1

必須通過[開發手冊]您讀(https://neo4j.com/docs/developer-manual/3.1/)?這是在文檔中詳細解釋的基本查詢功能:在您的開始節點上匹配所需的模式,返回您感興趣的模式部分。您試圖查詢的內容到目前爲止您嘗試過了什麼? – InverseFalcon

+0

謝謝@InverseFalcon。用我的方法更新了問題。是啊,看起來像一個選擇查詢基本,但有點卡住了。任何建議 –

回答

0

你需要確保你使用相同的關係類型,您創建的關係時一樣。在創建查詢中,創建一個:FRIENDS關係,但在後續查詢中,您正在尋找一個:FRIEND關係。你需要確保你是一致的。

此外,您還需要確保從比賽中正確的變量中返回參數。

在您的查詢中,a是您的起始節點,因爲您提供了該節點的ID,但是您要返回同一節點的ID。我想你的意思是返回actor.id,它引用比賽另一端的變量。

要記住的另一件事是關係方向。 Neo4j中的所有關係都有一個方向,但是有很多問題你不關心關係的方向,或者你不知道它是朝着哪個方向發展。您的朋友關係就是一個很好的例子,因爲當您查詢兩個用戶是否是朋友時,您不會知道或關心方向,因此您可以將方向箭頭留在查詢中。

試試這個:

session.run("MATCH (a:User{id:{id}})-[:FRIENDS]-(actor) RETURN actor.id", 
     parameters("id", user)); 
+0

謝謝@InverseFalcon它的作品! –

相關問題