有人可以帮我解决这个问题。
我正在使用密码查询来获取与“hive”或“hadoop”有关系的节点,并且我能够获取这些节点。
但是当我尝试获取具有“hive”和“hadoop”关系的节点时,我无法获取节点。
这是我正在使用的查询
开始 n=node(*) 匹配 (n)-[r]-() 其中 type(r)="Hadoop" 和 type(r)="hive" 返回 n,count(n);
此查询返回 0 行。
我的查询是错误的还是我需要以其他方式进行。
提前致谢。
古斯
这应该这样做:
start n=node(*) match ()-[:Hadoop]-(n)-[:hive]-() return n,count(n)
我认为您的查询应该是:
开始 n=node(*) 匹配 (n)-[r1]-(),(n)-[r2]-() 其中 type(r1)="Hadoop" 和 type(r2)="hive" 返回 n,计数(n);
你可以像这样实现它
match (n)-[r:Hadoop|hive]-()
return n,count(n);
它将为您提供您所期望的。最好在 match 中设置条件,而不是在 where 子句中。
首先,您的查询没有结果的原因是因为该部分where type(r)="Hadoop" and type(r)="hive"
说您正在寻找 r 的实例,其中 r.type = "Hadoop" 和 "hive" 同时。由于 r.type 在任何时候只能有一个值,它不可能同时等于 Hadoop 和 Hive;因此该语句可以在逻辑上简化为“where false”或基本上删除所有匹配项。
如果您正在寻找具有任何一种关系的所有节点,那么Satish Shinde 的答案是指定它的正确方法
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);
为了完整起见,如果您想检查两者都存在于哪里,您可以使用remigio 的答案
start n=node(*) match ()-[r2]-(n)-[r1]-() where type(r1)="Hadoop" and type(r2)="hive" return n,count(n);