如果存在特定关系,则仅返回此关系

时间:2019-02-13 12:48:48

标签: neo4j cypher

我是Neo4j的新手。我有一个表示主机上安装的所有RPM的图,所以我有一个主机节点和多个RPM节点,它们之间具有“已安装”关系。为此,我还具有一些RPM-> RPM关系用于RPM依赖关系。因此,这是两个RPM节点之间的“依赖”关系。

我想在Neo4j浏览器上显示整个图表(有限制)。但是,由于依赖项也安装在主机上,因此仍会显示依赖项的“安装位置”关系并连接到主机节点。这使得整个图形更难以阅读。

我想仅保留“ depends on”关系作为依赖关系,并屏蔽“ installed in”关系。我将仅显示不依赖于另一个RPM的顶级RPM的“已安装”关系。

是否可能有这样的查询?

  • 如果存在关系A,则仅显示A,否则显示全部

编辑:

我有很多数据(来自Elasticsearch),很多RPM,并且只有一个主机,无论我设置的LIMIT如何,我都希望主机始终出现在图形上(基本上我希望主机是第一个主机)节点)

1 个答案:

答案 0 :(得分:2)

1)添加测试数据:

CREATE (N:Host)
CREATE (P1:RPM)
CREATE (P2:RPM)
CREATE (P3:RPM)
CREATE (P1)-[r1:`installed in`]->(N)
CREATE (P2)-[r2:`installed in`]->(N)
CREATE (P3)-[r3:`installed in`]->(N)
CREATE (P2)-[r4:`depends on`]->(P3)
RETURN *

2)并使用CASE

MATCH (P:RPM)-[r1:`installed in`]->(:Host)
OPTIONAL MATCH (P)-[r2:`depends on`]->(:RPM)
WITH CASE WHEN r2 IS NULL 
          THEN r1 
          ELSE r2 
     END as relation
RETURN startNode(relation) as rpmNode,
       relation,
       endNode(relation) as relatedNode