在Neo4j中以图表形式返回动态关系

时间:2015-12-01 19:35:22

标签: neo4j cypher

我对Neo4j和图表数据库一般都很陌生,过去几天一直在玩它。我现在遇到了一件令我难以理解的事情:我正试图在两个不相交的节点之间创建一个“临时”关系,仅仅是为了RETURN,然后不再将这种关系存储在数据库中。

我正在使用的数据集是一个基本的Neo4j内置教程中提供的Movie和Person节点的图形。我的查询目前如下:

MATCH (p1:Person)-[r1:ACTED_IN]-(m1:Movie)-[r2:ACTED_IN]-(p2:Person)
WHERE p1.name="Kevin Bacon"
RETURN {start:p1,rel:"COSTAR",end:p2}

我最终希望看到的是一个中心“Kevin Bacon”节点,它与周围的一系列Person节点有COSTAR关系,没有显示任何Movie节点或ACTED_IN关系。 上面的查询在返回的行中显示COSTAR关系,但不会出现在图表本身上;我附上了一些我正在看到的截图。

我唯一的另一个想法是使用MERGE关键字来创建COSTAR关系,但是(据我所知)这实际上将关系存储在DB中,这正是我想要避免的。

任何建议都将不胜感激。

"Graph result, note that COSTAR is *not* present

"Rows" result, note that COSTAR is present

2 个答案:

答案 0 :(得分:2)

所以你希望关系出现在Neo4j浏览器的图形可视化中,但不能将这些关系存储在图形本身中?我想不出一种方法可以实现这一点(不破解它),但是在完成视觉工作后会删除关系吗?

查询以创建COSTAR关系:

MATCH (p1:Person)-[r1:ACTED_IN]-(m1:Movie)-[r2:ACTED_IN]-(p2:Person)
WHERE p1.name="Kevin Bacon"
CREATE UNIQUE (p1)<-[:COSTAR]-(p2);

执行您的查询以在Neo4j浏览器中填充图表...

然后删除COSTAR关系:

MATCH (:Person)-[r:COSTAR]-(:Person)
DELETE r;

答案 1 :(得分:2)

neo4j浏览器仅显示数据库中实际存在的节点和关系。因此,如果不实际创建COSTAR关系,在浏览器中显示结果,然后删除所有COSTAR关系,就无法执行您想要的操作。

作为一种解决方法,您可以简单地显示所有Kevin Bacon的costars的节点,如下所示:

MATCH (p1:Person)-[:ACTED_IN]-(:Movie)-[:ACTED_IN]-(p2:Person)
WHERE p1.name="Kevin Bacon"
RETURN DISTINCT p2;