2014-11-25 38 views
0

我正在使用neo4j 2.1.5並綁定模擬一個場景,其中節點是視頻鏈接,它們屬於多個類別和子類別,但是這些節點也將在特定的序列類別下形成一個有序序列。 例如;如何按順序存儲節點?

Sequence 1: (node 1)-[:relatedTo]->(node 2)->[:relatedTo]->(node 3)-[:relatedTo]->(node 4) 

Sequence 2: (node 2)-[:someRel]->(node 8)->[:someRel]->(node 4)

應該用什麼來模擬這一目標的最佳方式是什麼?
注意:更多的視頻節點將被添加到節點之間的序列類別中。

回答

0

你這樣做的方式對我來說看起來很好。一組節點與它們之間的關係基本上形成一個隊列。你在這裏做的是基本上使用neo4j來建模linked list

該類別的鏈接可能會變得有趣。使用鏈表,很容易,但隨機訪問(跳到中間)很困難。現在,如果訂單始終是固定的,您可以將seq屬性添加到您的關係中,並以數字形式(0,1,2 ...)對其進行標註。然後,您可以通過查詢適當的seq值來跳到任何位置。 但是,如果你想要做動態插入到列表中,這可能是一個可怕的想法。如果您創建了新的#3,這意味着您必須遞增所有後續seq號碼。所以這可能不會起作用。

也許只是一個始終保證鏈接到序列中的第一項Category節點去,這樣一個好辦法:只要你想你可以做很多:next關係

(c:Category {name:"Horror"})-[:contains]->(v1:Video {name: "Texas Chainsaw Massacre"})-[:next]->(v2:Video { name: "Hellraiser"}); 

。要插入新的東西,你可以這樣做:

MATCH (v1:Video {name: "Texas Chainsaw Massacre"})-[r:next]->(v2:Video {name: "Hellraiser"}) 
CREATE v1-[:next]->(v3:Video {name: "New Thing I'm inserting"}-[:next]->v2 
DELETE r; 

另一種方法是,你可以在類別鏈接到每一個視頻(不只是第一)。您的視頻仍然會訂購,您可以通過隨機訪問的視頻名稱進入該視頻,但是您不知道列表的頭部位置在哪裏。

+0

Thnx在這種情況下有更多有趣的事情,視頻不會只是一個排序類別的一部分,每個類別可能有也可能沒有一個節和子節(seq。),所以它看起來像; (類別1) - [:含有] - >(VIDEO1) - [:下一個] - >(VIDEO2); (category2) - [:hasSection] - >(section1) - [:next] - >(section2) - [:hasVideo] - >(video3) - [:next] - >(video4)如果存在子部分,那麼(category2) - [:hasSection] - >(section1) - [:hasSubSection] - >(section3) - [:hasVideo] - >(VIDEO2) - [:下一個] - >(VIDEO3) – awadhesh 2014-11-26 11:55:36