Cypher匹配一种模式或另一种模式

时间:2016-03-14 04:18:37

标签: neo4j match cypher

这可能非常简单,但我无法找到答案...我有一个匹配的规则基本上说:

MATCH (N1:Type1)-[:src]->(P)-[:trgt]->((N2:Type1) OR (N2:Type2))

MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2)

显然代码不起作用,但它可以解释我的问题。所以,我希望找到相同的模式,区别在于N2的类型,并且在两种情况下都在MERGE - 部分中执行相同的操作。如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

以下是如何修改您的查询以测试N2是否具有以下类型:

MATCH (N1:Type1)-[:src]->(P)-[:trgt]->(N2)
WHERE N2:Type1 OR N2:Type2
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2);

答案 1 :(得分:1)

然而,使用'其中'匹配后过滤。如果我们使用匹配,我们可以在匹配期间直接转到关系类型存储,这样更有效。使用'其中'我们需要在过滤之前提取所有[:trgt]关系,因此根据你的图形(在> [:trgt]之后是否还有许多其他可能的节点类型),使用代码可能更有效:

MATCH (N1:Type1)-[:src]->(P)-[:trgt]->(N2:Type1)
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2);
MATCH (N1:Type1)-[:src]->(P)-[:trgt]->(N2:Type2)
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2);