2017-02-21 43 views
0

graph snippet密碼 - 關係遍歷與按屬性排序

我有一個Shape列表的點。

我有以下要求:

1)檢索一組有序的點;

2)插入/取出點並保留點的其餘部分的次序

我可以實現這一點:

A)點有可能被用於一個序列整數屬性訂購;

B)在每個Point之間添加一個:NEXT關係來創建一個鏈表。

我是Neo4j的新手,不確定哪種方法更適合滿足要求?

對於第一個要求,我寫了下面的查詢,並找到了遍歷的性能要差,但我敢肯定它的構造不正確的查詢:

//A) 146 ms 
Match (s:Shape {id: "1-700-y11-1.1.I"})-[:POINTS]->(p:Point) 
return p 
order by p.sequence; 

//B) Timeout! Bad query I know, but dont know the right way to go about it! 
Match path=(s:Shape {id: "1-700-y11-1.1.I"})-[:POINTS]->(p1:Point)-[:NEXT*]->(p2:Point) 
return collect(p1, p2); 

回答

2

拿分的有序列表使用稍微修改第二個查詢的版本:

Match path=(s:Shape {id: "1-700-y11-1.1.I"})-[:POINTS]->(P1:Point) 
              -[:NEXT*]-> (P2:Point) 
     WHERE NOT (:Point)-[:NEXT]->(P1) AND 
       NOT (P2)-[:NEXT]->(:Point) 
RETURN TAIL(NODES(path)) 

再舉例來說,查詢,刪除:

WITH "id" as pointToDelete 
MATCH (P:Point {id: pointToDelete}) 
OPTIONAL MATCH (Prev:Point)-[:NEXT]->(P) 
OPTIONAL MATCH (P)-[:NEXT]->(Next:Point) 
FOREACH (x in CASE WHEN Prev IS NOT NULL THEN [1] ELSE [] END | 
    MERGE (Prev)-[:NEXT]->(Next) 
) 
DETACH DELETE P