Neo4j Cypher没有完成查询

时间:2017-06-13 18:06:33

标签: neo4j cypher

我是Neo4j的新手,我正在使用示例提供的数据库(Link)。 我试图在每个扮演同一部电影的演员之间创建一个新的关系,然后我运行这个查询

MATCH (p1:Actor)-[:ACTS_IN]->(:Movie)<-[:ACTS_IN]-(p2:Actor) WHERE id(p1)>id(p2) MERGE (p1)-[:ACTED_WITH]->(p2)

但由于一个未知的原因,它只创造了一些关系而不是其他关系。我已经检查了Node类型和Relationships类型,但似乎它们都是相同的,因此查询应该在所有情况下都能正确运行。

如果你想尝试这个东西,只需从链接下载数据库,运行上面的查询,并检查这两部电影,阿凡达的作品但不适用于哈特的战争

MATCH p=(a)-[]-() WHERE a.title = "Hart's War" OR a.title="Avatar" RETURN p

1 个答案:

答案 0 :(得分:0)

此查询应该满足您的需求:

MATCH (p1:Actor)-[:ACTS_IN]->(m:Movie)
MATCH (p2:Actor)-[:ACTS_IN]->(m)
WHERE p2 <> p1
OPTIONAL MATCH (p1)-[r:ACTED_WITH]-(p2)
FOREACH (n IN (CASE WHEN r IS NULL THEN [0] ELSE [] END) |
    MERGE (p1)-[:ACTED_WITH]->(p2)  
)

我不知道这种做法是否最好,但我相信这是有效的。

要仅在两个节点之间创建:ACTED_WITH关系(而不是(a)-[:ACTED_WHT]->(b)(a)<-[:ACTED_WHT]-(b))我正在使用this trick。 Basicaly我正在使用IFFOREACH语句模拟CASE条件。

使用Neo4j 3.2测试。

Output