2016-11-11 16 views
0

私はこのように、チェーン内のノードを持っています。しかし、このチェーン内の各ノードは、単一を持ってNeo4j:パス内のノードからノードを追加する方法は?

MATCH chain=(start :n {height:100})-[:chain*4]->(end :n) 
RETURN chain 

(n {height:100}) 
| 
(n) 
| 
(n) 
| 
(n) 
| 
(n) 

私はこのCYPHERクエリでこれらのノードを取得することができますこのような特定の関係を持つノードは、次のようになります。

(n)-[:single]->(o) 
| 
(n)-[:single]->(o) 
| 
(n)-[:single]->(o) 
| 
(n)-[:single]->(o) 
| 
(n)-[:single]->(o) 

私はしたいと思いますそれぞれ(n)(o)が返されます。

これを1つのサイファークエリで行うことは可能ですか?

答えて

1

パス上で一致しない場合はチェーンのすべてのノード(およびそれぞれのノードをオフにする)を取得する方が簡単ですが、問題はありません。

MATCH (start :n {height:100})-[rels:chain*0..4]->(chainlink :n)-[:single]->(o) 
RETURN chainlink, o 
ORDER BY SIZE(rels) 
+0

感謝を。これは私が以下で見つけた解決策より簡単です。 – inersha

0

さて、それはWITH(chain)の使用だとUNWINDは、トリックを行います。

MATCH chain=(start :n {height:100})-[:chain*4]->(end :n) 
WITH NODES(chain) AS nodes 
UNWIND nodes as node 
OPTIONAL MATCH (node)-[:single]->(o :o) 
RETURN nodes, COLLECT(o) as os 
関連する問題