Cypher 1.8を使用すると、コレクションを処理して単一の要素を返す関数がいくつかあります。
HEAD( expression )
:
START a=node(2)
RETURN a.array, head(a.array)
LAST( expression )
:
START a=node(2)
RETURN a.array, last(a.array)
ただし、コレクションのn番目の要素を返す関数が見つかりませんでした。私は何が欠けていますか?
Cypher 1.8を使用すると、コレクションを処理して単一の要素を返す関数がいくつかあります。
HEAD( expression )
:
START a=node(2)
RETURN a.array, head(a.array)
LAST( expression )
:
START a=node(2)
RETURN a.array, last(a.array)
ただし、コレクションのn番目の要素を返す関数が見つかりませんでした。私は何が欠けていますか?
現時点では、それを行うための良い方法はありません。https://github.com/neo4j/neo4jで機能リクエストを送信してください
私は人々がhead(tail(tail(tail(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)));
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]
スナップショットのドキュメントが更新されたら、そのドキュメントへのリンクを追加します。
私はこの古い質問に出くわしました、そして最近それを見つけた他の誰かの利益のために...リストのサポートが改善されたようです。
Cypherは、リストを包括的にサポートしています。
^補足:リスト内包表記の駄洒落だと思いますか?;-)
次に、リストのn番目の要素にアクセスする方法を示す例を示します。
リスト内の個々の要素にアクセスするには、角かっこを再度使用します。これにより、開始インデックスから終了インデックスまでが抽出されますが、終了インデックスは含まれません。...範囲関数を使用します。それはあなたに与えられた開始番号と終了番号の間のすべての番号を含むリストを与えます。範囲は両端を含みます。
RETURN range(0, 10)[3]
^ returns "3"
現在、APOCプロシージャ3.3.0.2のリリースでは、集計関数を使用できます。
このように、あなたは次のように考えることができます:
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);
また:
match(n:Node)
with n order by n.node_id
// returns {"node_id":1}
// you can also use apoc.agg.last
return apoc.agg.first(n);
UNWIND
リストを最初に操作するには、次のようにします。
with ['fist', 'second', 'third'] as list
unwind list as value
// returns 'second'
return apoc.agg.nth(value, 1);