Neo4j Cypher中的.indexOf()等效

时间:2015-05-07 06:36:49

标签: neo4j cypher nosql

无论我如何摆动它,我都需要某种函数来查找作为参数提供的数组中项的索引。

我试图简单地根据数组中某个属性的索引更新集合中的项目,并且已经通过Cypher docs进行了近2个小时的研究......

通过该数组对项目进行排序,然后在有序列表上运行foreach也是可以接受的......

2 个答案:

答案 0 :(得分:1)

关注@ stefan-armbruster的回答和精彩的博客文章,可以通过以下方式完成缓慢但简单的 index_of

reduce(x=[-1,0], i IN [1,2,7,5,21,5,1,435] | 
    CASE WHEN i = 21 THEN [x[1], x[1]+1] ELSE [x[0], x[1]+1] END 
)[0]

这里reduce函数使用两个元素数组:位置和当前索引。如果数组中的元素与给定条件匹配,则reduce数组的第一个元素将替换为当前索引。 我在neo4j控制台http://console.neo4j.org/?id=34byv

上放了一个例子

答案 1 :(得分:0)

我最近blogged about that。您可以将reduce函数与三元素数组一起用作包含

的状态变量
  • 迄今为止最高职业的指数
  • 当前索引(又名迭代编号)
  • 迄今为止最高职业的价值

作为查找数组中max元素索引的示例:

RETURN reduce(x=[0,0,0], i IN [1,2,2,5,2,1] | 
    CASE WHEN i>x[2] THEN [x[1],x[1]+1,o] ELSE [x[0], x[1]+1,x[2]] END 
)[0]