neo4j 如何根据每个关系类型的不同方向匹配Cypher查询中的节点

cwdobuhd  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(188)

我得到了一个有两种关系的图:SyncAsync
我希望查询给予一个子图,即所有可以直接或间接到达的节点。
此查询适用于:

MATCH (s {type: 'service')
OPTIONAL MATCH (s)-[:Async|Sync*]->(dependent)
WITH s, COLLECT(DISTINCT dependent) AS allDependentNodes

字符串
这给了我可以通过同步或异步关系到达的每个节点。
但现在我想根据关系类型使用不同的方向。我希望可以通过传出Sync a -> b或传入Async a <- b到达的节点。
所以这就像一个OR匹配条件。我试过几种方法,但没有太大的成功:

MATCH (s {type: 'service')
OPTIONAL MATCH (s)-[:Sync*]->(dependent), (s)<-[:Async*]-(d)
WITH s, totalNodes, COLLECT(DISTINCT dependent) AS allDependentNodes


我如何将关系匹配在一起,或者我如何将不同类型的关系与不同的方向匹配?

p4tfgftt

p4tfgftt1#

要遵循由类型Sync和方向出站或类型Async和方向入站的关系组成的所有路径,以下量化路径模式将起作用:

MATCH (s {type: 'service'}) 
        ((n)-[r]-() WHERE (n = startNode(r) AND r:Sync) 
          OR (n = endNode(r) AND r:Async))+ (dependent)
RETURN s, collect(DISTINCT dependent) AS allDependentNodes

字符串

相关问题