首先,您的查询没有结果的原因是因为where type(r)="Hadoop" and type(r)="hive" 部分说您正在寻找 r 的实例,其中 r.type = "Hadoop" 和 "hive" 同时存在。由于 r.type 在任何时候只能有一个值,它不可能同时等于 Hadoop 和 Hive;因此该语句可以在逻辑上简化为“where false”或基本上删除所有匹配项。
如果您正在查找具有任一关系的所有节点,那么Satish Shinde's answer 是指定它的正确方法
match (n)-[:Hadoop|hive]-()
return n,count(n);
或者,有方向
match (n)-[:Hadoop|hive]->()
return n,count(n);
如果您需要两者都存在,那么您需要匹配两个单独的关系边缘,如下所示
match ()-[:hive]-(n)-[:Hadoop]-()
return n,count(n);
或者,有方向
match ()<-[:hive]-(n)-[:Hadoop]->()
return n,count(n);
为了完整起见,如果您想检查两者都存在于 where close 中,您可以使用remigio's answer
start n=node(*) match ()-[r2]-(n)-[r1]-() where type(r1)="Hadoop" and type(r2)="hive" return n,count(n);