2016-11-04 18 views
1

だが、私はこのクエリを持っているとしましょう:CYPHERのパス内の特定のノードでLIMITを使用するにはどうすればよいですか?

enter image description here

は、どのように私はこのパスの異なる層にLIMITを使用することができますか?それはパス内の最後のノードにしか影響しないようです。

1か月間、3か月間、5か月間のそれぞれの場合はどうすればよいですか?

対応する月の条件付きはどうですか?すなわちM = 2であれば、M = 3、D = [11,12,13,14,15]であればD = [1,2,3,4,5]となる。このような

何か:

enter image description here

今のところ、私は手動で、拡張することにより、これらの図を編集、削除、expanindなどされていることは非常に面倒であるので、私は方法がある願っていますクエリでこれを行う。

私は別々のリミット、ユニオンで複数の返品を試しましたが、何もできないようです。

私はブラウザでこれを行いたいと思います。私は、それが単一のコマンドでなければならないことを意味すると信じています。

私のような事をしようとしてきた:

MATCH (t:TimeTreeRoot)-[c1:CHILD]-(y:Year) 
WITH t, c1, y LIMIT 1 
MATCH (t)-[c1]-(y)-[c2:CHILD]-(m:Month) 
WITH t, c1, y, c2, m LIMIT 3 
MATCH (m)-[c3:CHILD]-(d:Day) 
WITH t, c1, y, c2, m, c3, d 
MATCH p=(t)-[c1]-(y)-[c2]-(m)-[c2]-(d) 
RETURN p LIMIT N 

しかし、動作が矛盾しています。前のLIMITが次のLIMITによって否定されているようです。

+0

我々はそれを試すことができるようになります(たとえば、GitHubの要旨と)(のNeo4jのWeb UIを使用して)CSVとしてこのグラフをエクスポートし、共有していただけますか? –

+0

CSVを作成したばかりですが、手動で変更してもエクスポート結果は変更されませんでした。あなたは最初の画像からCSVを欲しいだけですか? [こちら](https://gist.github.com/spanishgum/132e08de11db0e00df1ebd74da0cac7f)です。あなたがそれ以上のことを望むなら私に知らせてください。私は巨大なグラフを持っているので、私はすべてを与えることはできませんが、あなたが望むなら私が提供するでしょう。 – spanishgum

答えて

2

これをすべて1つの試合で行い、それをパスとして取得することはできません。この時点で、LIMITは結果セット全体に適用されます。 Neo4jが将来サブクエリを追加する場合は、意図した方法で使用できます。

ノードを収集して関連するスライスを取得し、必要に応じてコレクションを後で行に巻き戻すことで、ノードの同様の結果セットを別の方法で取得できます。

MATCH (t:TimeTreeRoot)-[:CHILD]->(y:Year)-[:CHILD]->(m:Month) 
WITH t, y, m LIMIT 3 
MATCH (m)-[:CHILD]->(d:Day) 
WITH t, y, m, COLLECT(d)[0..5] as days 
UNWIND days as d 
RETURN t, y, m, d 

代わりに、あなたはTimeTreeと協力し、あなたが欲しいの正確な日数を選択し、それらを使用することができ、で動作するように値の特性を有しているので、(それらが作成されている提供)。

MATCH (t:TimeTreeRoot)-[:CHILD]->(y:Year)-[:CHILD]->(m:Month) 
WITH t, y, m LIMIT 3 
MATCH (m)-[:CHILD]->(d:Day) 
WHERE d.value in RANGE(1,5) 
RETURN t, y, m, d 

WHERE句に追加して月ごとに異なる日数を取得できます。

MATCH (t:TimeTreeRoot)-[:CHILD]->(y:Year)-[:CHILD]->(m:Month) 
WITH t, y, m LIMIT 3 
MATCH (m)-[:CHILD]->(d:Day) 
WHERE (m.value = 3 AND d.value in RANGE(11,15)) OR (m.value <> 3 AND d.value in RANGE(1,5)) 
RETURN t, y, m, d 
+0

これは私が欲しかったものです!これはまた、UNWIND機能がどのように機能するかを理解するのにも役立ちました。ありがとうございました!副次的な注意:最初のコードブロックの最後の 'WITH'ステートメントに' t、y、m'を忘れました。 – spanishgum

+0

ああ、それをキャッチするために感謝!私はその質問を修正した。助けてうれしい! – InverseFalcon

関連する問題