0

有人可以帮我解决这个问题。

我正在使用密码查询来获取与“hive”或“hadoop”有关系的节点,并且我能够获取这些节点。

但是当我尝试获取具有“hive”和“hadoop”关系的节点时,我无法获取节点。

这是我正在使用的查询

开始 n=node(*) 匹配 (n)-[r]-() 其中 type(r)="Hadoop" 和 type(r)="hive" 返回 n,count(n);

此查询返回 0 行。

我的查询是错误的还是我需要以其他方式进行。

提前致谢。

古斯

4

4 回答 4

3

这应该这样做:

start n=node(*) match ()-[:Hadoop]-(n)-[:hive]-() return n,count(n)
于 2013-03-01T14:02:26.977 回答
2

我认为您的查询应该是:

开始 n=node(*) 匹配 (n)-[r1]-(),(n)-[r2]-() 其中 type(r1)="Hadoop" 和 type(r2)="hive" 返回 n,计数(n);

于 2013-03-01T13:51:57.343 回答
1

你可以像这样实现它

match (n)-[r:Hadoop|hive]-()
return n,count(n);

它将为您提供您所期望的。最好在 match 中设置条件,而不是在 where 子句中。

于 2015-03-14T13:19:53.950 回答
1

首先,您的查询没有结果的原因是因为该部分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);
于 2017-04-25T15:10:32.757 回答