Neo4j密码-单关系中的单向和双向查询?

时间:2019-01-23 00:04:44

标签: neo4j cypher

我遇到一种情况,我需要为一种类型的关系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)

但是接下来,我需要为每个INVERSE_A关系创建A,这将使该查询变得混乱。

是否有一种更清洁的方法将单向和双向关系合并到单个match语句中?

1 个答案:

答案 0 :(得分:0)

目前,以这种方式限制密码。

如果您有权访问APOC Procedures,则可以使用path expander procs提供扩展关系,并能够分别为每种类型提供方向(或缺少方向)。此特定过程会产生路径,因此您需要获取路径的最后一个节点。

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
...