2013-01-22 116 views
1

假設我的項目是Facebook。我想顯示一個包含我的狀態更新和朋友的狀態更新的供稿。Neo4j Cypher查詢獲取用戶源

這裏是關係;

  • 用戶知道用戶
  • 用戶UPDATES_STATUS狀態

這是我如何得到我的朋友的狀態更新;

START me = node(1) MATCH me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates RETURN friendsStatusUpdates 

這就是我如何得到我自己的狀態更新;

START me = node(1) MATCH me-[:UPDATES_STATUS]->myStatusUpdates RETURN myStatusUpdates 

這兩個查詢都能正常工作,但我需要一個將這兩者結合的查詢。

回答

2

這是我從Google Groups得到的答案;

START me = node(1) MATCH me-[:KNOWS*0..1]-()-[:UPDATES_STATUS]->statusUpdate RETURN DISTINCT statusUpdate 

我唯一需要做的就是將*0..1深度指標的關係,以獲得兩個0或1級深度的結果。

編輯:我不得不添加DISTINCT,因爲沒有它查詢包括0次級結點2次導致重複。


替代查詢使用WITH語句返回相同的結果;

START me = node(1) 
MATCH me-[:KNOWS*0..1]-friend 
WITH DISTINCT friend 
MATCH friend-[:UPDATES_STATUS]->statusUpdate 
RETURN DISTINCT statusUpdate 
+0

您的查詢只返回來自用戶朋友的帖子如何在這種情況下給予用戶自己的帖子(我)??????? –

0

木箱一個他自己的用戶節點之間本身關係比查詢是START我=節點(1)匹配箱 - [:知道|自己] - (+) - [:UPDATES_STATUS] - > friendsStatusUpdates RETURN friendsStatusUpdates

+0

我不確定在neo4j中創建多圖是否是一個很好的標準解決方案。 – ulkas

0

http://docs.neo4j.org/chunked/milestone/introduction-pattern.html

START me = node(1) 
MATCH me-[:UPDATES_STATUS*1..2|KNOWS]-myStatusUpdates 
RETURN myStatusUpdates 

的情況下,與|命令*1..2不會工作,做到這一點:

START me = node(1) 
MATCH friendsStatusUpdates2-[?:UPDATES_STATUS]-me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates 
RETURN distinct myStatusUpdates,friendsStatusUpdates2 

只是編輯ŧ他RETURN陳述與一些聚合功能,所以你會得到一個狀態每行