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

Collections 获取Cypher中集合的第n个元素,collections,neo4j,cypher,Collections,Neo4j,Cypher,使用,有一些函数处理集合并返回单个元素: 头部(表情): START a=node(2) RETURN a.array, head(a.array) START a=node(2) RETURN a.array, last(a.array) 最后一个(表达式): START a=node(2) RETURN a.array, head(a.array) START a=node(2) RETURN a.array, last(a.array) 但是,我找不到返回集合的第n个元素的函数。我

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

头部(表情)

START a=node(2)
RETURN a.array, head(a.array)
START a=node(2)
RETURN a.array, last(a.array)
最后一个(表达式)

START a=node(2)
RETURN a.array, head(a.array)
START a=node(2)
RETURN a.array, last(a.array)

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

目前没有什么好办法。请在以下地址提交功能请求:

我见过人们用头(尾(尾)(尾(尾)(coll))),虽然它的速度可能可以接受,但在查询中看到它仍然让我有点不舒服,特别是当你在谈论第17个元素或更糟的元素时

例如:

更新: 这里有一种使用reduce和range的方法。它使您至少可以为n提供一个参数,尽管它仍然让我感到畏缩:

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

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

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

更新快照文档后,我将添加一个指向该文档的链接。

当前,随着的发布,您可以使用

通过这种方式,您可以这样做:

create (:Node {node_id : 1}),
    (:Node {node_id : 2}),
    (:Node {node_id : 3});

match(n:Node)
with n order by n.node_id
// returns {"node_id":2}  
return apoc.agg.nth(n, 1);
或:

要使用列表,请首先展开列表:

with ['fist', 'second', 'third'] as list
unwind list as value
// returns 'second'
return apoc.agg.nth(value, 1);

我刚刚遇到这个老问题,为了最近遇到的其他人的利益。。。列表支持似乎有所改进

从:

Cypher对列表有全面的支持

^旁注:我认为这是列表理解双关语?;-)

他们接着给出了一个示例,展示了如何访问列表的第n个元素:

为了访问列表中的各个元素,我们再次使用方括号。这将从开始索引提取,直到但不包括结束索引。 ... 我们将使用范围函数。它将为您提供一个列表,其中包含给定开始编号和结束编号之间的所有编号。范围包括两端


@fynn我已使用此函数提交了一个拉取请求。语法类似于:
nth(17,a.array)