在Neo4J中,我如何匹配子图,但是过滤另一个子图中的节点

时间:2019-04-10 18:46:15

标签: neo4j cypher spring-data-neo4j neo4j-apoc

我的图是有向无环图。我想查询给定父节点的子图,但随后滤除与另一个父节点有关系的子图。我创建了一个图像来说明。

例如,我想选择子图(C)-[r]->(D),但排除(B)-[r]->(E),因为它是(A)的子项。

我编写了以下Cypher查询,其中包括对apoc.path.subpgrahAll()的调用,它过滤掉了(B),但没有过滤掉(E)这样的节点

MATCH (n {id: 'C'})
CALL apoc.path.subgraphAll(n, {relationshipFilter: 'CONNECTED>'})
YIELD nodes, relationships
UNWIND nodes as node
WITH node
WHERE SIZE(()-[:CONNECTED]->(node)) = 1
RETURN node

enter image description here

1 个答案:

答案 0 :(得分:0)

这可能对您有用:

CALL apoc.path.subgraphAll(n, {relationshipFilter: 'CONNECTED>'}) YIELD nodes, relationships
UNWIND nodes as node
WITH node
WHERE SIZE((node)<-[:CONNECTED]-()) = 1
RETURN node

顺便说一下,在Cypher模式中,您需要在关系类型之前加冒号,这是查询的问题之一(但不是主要问题)。