繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM