有人可以帮我这个。
我正在使用密码查询来获取具有“hive”或“hadoop”关系的节点,并且我能够获取节点。
但是当我试图获得与'hive'和'hadoop'都有关系的节点时,我无法获得节点。
这是我正在使用的查询
start n = node(*)match(n) - [r] - ()where type(r)=“Hadoop”and type(r)=“hive”return n,count(n);
此查询返回0行。
我的查询是错误的还是我需要以其他方式执行此操作。
提前致谢。
Gouse
答案 0 :(得分:3)
这应该这样做:
start n=node(*) match ()-[:Hadoop]-(n)-[:hive]-() return n,count(n)
答案 1 :(得分:2)
我认为你的查询应该是:
start n = node(*)match(n) - [r1] - (),(n) - [r2] - ()其中type(r1)=“Hadoop” 并键入(r2)=“hive”返回n,count(n);
答案 2 :(得分:1)
你可以像这样实现它
match (n)-[r:Hadoop|hive]-()
return n,count(n);
它将为您提供您所期望的。匹配条件更好,而不是在where子句中。
答案 3 :(得分:0)
首先,您的查询没有结果的原因是因为部分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);
为了完整起见,如果你想检查两者是否存在,你可以使用remigio's answer
start n=node(*) match ()-[r2]-(n)-[r1]-() where type(r1)="Hadoop" and type(r2)="hive" return n,count(n);