获取Cypher中集合的第n个元素

Fyn*_*ynn 4 collections neo4j cypher

使用Cypher 1.8,有一些函数处理集合并返回单个元素:

HEAD( expression ):

START a=node(2)
RETURN a.array, head(a.array)
Run Code Online (Sandbox Code Playgroud)

LAST( expression ):

START a=node(2)
RETURN a.array, last(a.array)
Run Code Online (Sandbox Code Playgroud)

但是,我找不到函数来返回集合的第n个元素.我错过了什么?

Eve*_*man 12

目前没有好办法做到这一点.请通过https://github.com/neo4j/neo4j提交功能请求

我已经看到人们做头(尾巴(尾巴(尾巴(coll)))),虽然它可能是可以接受的快,但它仍然让我在查询中看到一点病,特别是如果你在谈论第17个元素或者更糟.

示例:http: //console.neo4j.org/r/bbo6o4

更新: 这是使用reduce和range执行此操作的方法.它使得你至少可以给第n个参数,即使它仍然让我感到畏缩:

start n=node(*) 
with collect(n) as allnodes 
return head(reduce(acc=allnodes, x in range(1,3): tail(acc)));
Run Code Online (Sandbox Code Playgroud)

http://console.neo4j.org/r/8erfup

更新2(2013年8月31日):
新的集合语法现在合并到2.0,理论上将成为M05的一部分!所以,你将能够做到:

start n=node(*)
with collect(n) as allnodes
return allnodes[3]; // or slices, like [1..3]
Run Code Online (Sandbox Code Playgroud)

我会在更新时添加指向快照文档的链接.