在Neo4j密码查询中匹配为逻辑AND / OR

时间:2018-08-15 03:27:28

标签: neo4j cypher

我是Neo4j的新手,我需要查询匹配的图或任何子图,如下所示:

Query Graph

所以我尝试了OPTIONAL MATCH,但是我意识到它不能为我提供所需的结果。这是我之前尝试过的查询。

OPTIONAL MATCH (w:W)-[:WRITES]->(a1:A{name:"A1"})
WITH w,a1
OPTIONAL MATCH (w)-[:WRITES]->(a2:A{name:"A2"})
WITH w,a1,a2
OPTIONAL MATCH (w)-[:WRITES]->(a3:A{name:"A3"})
WITH w,a1,a2,a3
OPTIONAL MATCH (w)-[:WRITES]->(a4:A{name:"A4"})
RETURN w,a1,a2,a3,a4

尽管这是一个可选的匹配,但它仍然是与外部联接(在SQL上下文中)的逻辑AND匹配

在我的情况下,每次匹配都需要OR和AND结果,这意味着它应该与上述解释图的任何子图都匹配。

因此,我需要按以下方式获取结果。

MATCH (w:W)-[:WRITES]->(a1:A{name:"A1"})

OR / AND

MATCH (w)-[:WRITES]->(a2:A{name:"A2"})

OR / AND

MATCH (w)-[:WRITES]->(a3:A{name:"A3"})

OR / AND

MATCH (w)-[:WRITES]->(a4:A{name:"A4"})
RETURN w,a1,a2,a3,a4

是否可以通过Neo4j密码查询满足我的要求?

我的结果集应如下所示。

W, A1, A2, A3, A4
{name:w1,....}, {name:A1,....}, {name:A2,....}, {name:A3,....}, {name:A4,....}
{name:w1,....}, null, {name:A2,....}, null, {name:A4,....}
{name:w1,....}, null, null, null, {name:A4,....}
{name:w1,....}, {name:A1,....}, {name:A2,....}, null, null
{name:w1,....}, {name:A1,....}, null, {name:A3,....}, {name:A4,....}

1 个答案:

答案 0 :(得分:0)

如果要将与:WRITES关系连接的任何:W节点连接到给定的任何:A节点,则此查询应该有效:

data:

编辑

啊,好的,所以,如果我正确地阅读了更新,则您希望将任何:W节点连接到这些:A节点之一,但是您想知道该节点连接到了那些:A节点中的哪一个,并且您希望每个:A节点都有其自己的变量(这使它变得有些棘手)。

您可以使用上述查询的某些变体来找到MATCH (w:W)-[:WRITES]->(a:A) WHERE a.name in ["A1", "A2", "A3", "A4"] RETURN w, a 节点,然后像原始查询中一样使用w中的OPTIONAL MATCHES来获取答案。另外,您可以使用类似以下查询的内容:

w