2012-04-11 45 views
1

道歉,如果這是一個簡單的問題,但我想談談,這樣的智慧,讓我在這個隆起:)如何限制從Neo4j的遍歷結果與neography

我使用的是回報率3.1.1與neography寶石。

我目前有一個neo4j圖形的人與關係的節點作爲「朋友」連接它們。給定一個特定的人的節點,我想每次瀏覽朋友的朋友(二級節點)5的結果。現在,我使用下面的遍歷代碼,一次讓我所有的朋友們 - 的 - 朋友(可能需要這麼長時間,它會導致超時):

nodes = @neo.traverse(user_node,"nodes", {"order" => "breadth first", 
              "uniqueness" => "node global", 
              "relationships" => {"type"=> "friends", "direction" => "all"}, 
              "return filter" => { 
              "language" => "javascript", 
              "body" => 
              "position.length() == 2;"}, 
              "depth" => 2}) 

從Neo4j的網站(http://docs.neo4j.org/chunked/stable/rest-api-traverse.html#rest-api-creating-a-paged-traverser) ,看起來好像已經有了分頁遍歷這樣的事情,但是我沒有看到從neography這樣做的任何引用。

有人可以提供示例代碼來說明如果可能的話如何用neography來做到這一點,如果必要的話如何在沒有neography的情況下做到這一點,或者解決方法如限制從示例遍歷返回的結果的數量我已經在做什麼?謝謝!

回答

2

你能使用這個,http://docs.neo4j.org/chunked/snapshot/cypher-query-lang.html一個暗號查詢,像

START n = node(0) Match n-[:friends]->()-[:friends]->fof RETURN fof SKIP 0 LIMIT 5 

的第5個朋友?

+0

謝謝!這似乎主要工作,有一些怪癖。我認爲它會返回原始節點以及一些直接的朋友。也許它會返回一些直接通過另一個朋友連接的朋友,但我認爲這個查詢應該排除直接朋友? 此外,它似乎沒有結果(零),當我指定一個不存在的RETURN字段。有沒有辦法說「如果它存在返回這個字段,否則返回結果爲零該字段」?例如。 ...「 - > fof RETURN fof.uid,fof.name,fof.birthday SKIP 0 LIMIT 5」 – ckbhodge 2012-04-11 23:40:52

+0

我仍然想知道它是否會返回直接的朋友,但我解決了返回字段問題存在使用?運營商: ... - >返回fof.uid,fof.name,fof.birthday? SKIP 0 LIMIT 5 – ckbhodge 2012-04-11 23:49:22

+0

經過更多調查後,我找到了一種方法來解決它返回開始節點和直接朋友的問題,同時保留它返回的朋友朋友。我正在接受你的回答,謝謝!這裏是我正在處理這些額外的調整密碼查詢: start n = node(1)match(n) - [:friends] - >(friend) - [:friends] - > fof where not(n < - fof)和(n.uid!= fof.uid)返回friend.uid,friend.name,fof.uid,fof.name,fof.gender? SKIP 0 LIMIT 5 – ckbhodge 2012-04-12 00:22:01