密码 - 关系遍历与财产排序

时间:2017-02-21 16:39:22

标签: neo4j cypher

graph snippet

我有一个带有点列表的Shape。

我有以下要求:

1)检索一组有序的点;

2)插入/移除一个Point并保留其余点的顺序

我可以通过以下方式实现这一目标:

A)Point有一个 sequence 整数属性,可用于订购;

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);

1 个答案:

答案 0 :(得分:2)

要获得有序的点列表,请使用第二个查询的略微修改版本:

main.cpp:9:5: warning: conversion function converting 'Derived' to its base class 'Base' will never be used
    operator Base() { return Base { 'a' }; }

例如要删除的查询:

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) )