如何获取FOREACH迭代的索引

时间:2016-01-23 17:22:07

标签: neo4j cypher

在FOREACH声明中[例如范围内的日(dayX,dayY)]是否有一种简单的方法可以找出迭代的索引?

2 个答案:

答案 0 :(得分:2)

是的,你可以。

以下是一个示例查询,它创建包含索引和日期的8个Day节点:

WITH 5 AS day1, 12 AS day2
FOREACH (i IN RANGE(0, day2-day1) | 
         CREATE (:Day { index: i, day: day1+i }));

此查询打印出结果节点:

MATCH (d:Day)
RETURN d
ORDER BY d.index;

这是一个示例结果:

+--------------------------+
| d                        |
+--------------------------+
| Node[54]{day:5,index:0}  |
| Node[55]{day:6,index:1}  |
| Node[56]{day:7,index:2}  |
| Node[57]{day:8,index:3}  |
| Node[58]{day:9,index:4}  |
| Node[59]{day:10,index:5} |
| Node[60]{day:11,index:6} |
| Node[61]{day:12,index:7} |
+--------------------------+

答案 1 :(得分:1)

FOREACH在迭代期间不会产生索引。如果您想要索引,可以使用rangeUNWIND的组合,如下所示:

WITH ["some", "array", "of", "things"] AS things
UNWIND range(0,size(things)-2) AS i
// Do something for each element in the array. In this case connect two Things
MERGE (t1:Thing {name:things[i]})-[:RELATED_TO]->(t2:Thing {name:things[i+1]})

此示例迭代计数器i,您可以使用该计数器访问数组中索引为i的项目。