在Cypher中通过索引进行迭代

时间:2015-11-30 18:48:35

标签: neo4j cypher

说我已经匹配了一系列关系:

MATCH a-[r:BELONGS_TO]->b

如何迭代每个关系并为其分配索引?在伪代码中:

for i in range(0, # of r's)
  r.order = i

3 个答案:

答案 0 :(得分:9)

这应该有效:

MATCH (a)-[r:BELONGS_TO]->(b)
WITH collect(r) as rels
WITH rels, range(0, size(rels)) AS is
UNWIND is AS i
WITH rels[i] as rel, i
SET rel.order = i

答案 1 :(得分:2)

你可以稍微破解它:

MATCH (a)-[r:BELONGS_TO]->(b)
WITH collect(r) as relationships
UNWIND range(0, size(relationships)-1) as x
RETURN relationships[x]

答案 2 :(得分:0)

根据您的要求,您可以使用neo4j DB自动分配给每个关系(和节点)的“内部”ID。虽然每个内部ID都是唯一的,但在删除关系(或节点)后,其内部ID可以由新关系(或节点)重用。随着时间的推移,关系(和节点)的活动内部ID集合可能不再具有0原点,并且可能没有连续的整数值。

如果内部ID足以满足您的需求,则无需添加自己的idindex属性。

您可以使用ID()功能在需要时获取内部ID。例如,这是您获取每个BELONGS_TO关系的内部ID的方式:

MATCH ()-[r:BELONGS_TO]->()
RETURN ID(r);