我对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中,这正是我想要避免的。
任何建议都将不胜感激。
答案 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;