找到与密码的顺序差距

时间:2016-01-05 22:18:44

标签: neo4j cypher

给定具有数字属性x的节点。 是否可以使用cypher在x中找到间隙?

{i1:Item {num:1}}
{i2:Item {num:2}}
{i3:Item {num:4}}
{i4:Item {num:5}}
{i5:Item {num:6}}
{i6:Item {num:10}}

在上述情况下,我们可以返回差距的开头和结尾或其他任何有用的东西:)

1 个答案:

答案 0 :(得分:1)

假设您有按照指定顺序连接Item节点的关系,您可以使用这样的查询来查找任何"间隙"两个Item节点之间的差异超过1:

MATCH (i1:Item)-[:NEXT]->(i2:Item)
WHERE i2.num-i1.num > 1 
RETURN i1,i2

Here是一个Neo4j控制台,展示了这一点。

修改

在不使用Item节点之间的关系的情况下,您只需先查找Item节点的集合,然后再查找超过1的间隙:

MATCH (i:Item) WITH i ORDER BY i.num ASC WITH collect(i) AS items
UNWIND range(0,size(items)-2) AS idx
WITH items[idx] AS i1, items[idx+1] AS i2 WHERE i2.num - i1.num > 1
RETURN i1, i2