[英]Neo4j cypher - unidirectional and bidirectional in single relationship query?
我遇到一种情况,我需要为一种关系A
或另一种关系B
匹配可变长度路径。 但是,关系类型A
是双向的,而关系类型B
是单向的。
例如,如果两种关系类型都是双向的,则可以使用以下match语句:
MATCH (:Something {property: "value"}) -[:A|B*]- (n:Something)
但是由于关系类型B
是单向的,所以我需要这样的东西:
MATCH (:Something {property: "value"}) (-[:A]- OR <-[:B]-)* (n:Something)
我可以使用的一种解决方案是为所有A
创建反向关系类型为INVERSE_A
,然后使用:
MATCH (:Something {property: "value"}) <-[:A|INVERSE_A|B*]- (n:Something)
但是,然后我需要为每个A
关系创建INVERSE_A
,这会使此查询混乱。
有没有一种更清洁的方法来将单向和双向关系合并到单个match语句中?
目前,Cypher以这种方式受到限制。
如果您有权访问APOC Procedures ,则可以使用路径扩展 程序proc提供扩展关系,并能够分别为每种类型提供方向(或缺少方向)。 此特定过程会产生路径,因此您将需要获取路径的最后一个节点。
MATCH (start:Something {property: "value"})
CALL apoc.path.expand(start, 'A|<B', 'Something', 1, -1) YIELD path
// parameters are: (startNode, relationshipFilter, labelFilter, minLevel, maxLevel)
WITH last(nodes(path)) as n
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.