Neo4j 如何使用cypher查询检索具有多个关系的节点

Neo4j 如何使用cypher查询检索具有多个关系的节点,neo4j,cypher,Neo4j,Cypher,谁能帮我一下吗 我使用cypher查询来获取作为“hive”或“hadoop”具有关系的节点,并且我能够获取这些节点 但是,当我试图获取同时具有“hive”和“hadoop”关系的节点时,我无法获取节点 这就是我正在使用的查询 开始n=节点(*)匹配(n)-[r]-(),其中类型(r)=“Hadoop”和类型(r)=“hive”返回n,计数(n) 此查询返回0行 我的问题是错的还是我需要用另一种方式来做 提前谢谢 我想你的问题应该是: start n=node(*)匹配(n)-[r1]-(),(

谁能帮我一下吗

我使用cypher查询来获取作为“hive”或“hadoop”具有关系的节点,并且我能够获取这些节点

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

这就是我正在使用的查询

开始n=节点(*)匹配(n)-[r]-(),其中类型(r)=“Hadoop”和类型(r)=“hive”返回n,计数(n)

此查询返回0行

我的问题是错的还是我需要用另一种方式来做

提前谢谢


我想你的问题应该是:

start n=node(*)匹配(n)-[r1]-(),(n)-[r2]-(),其中类型(r1)=“Hadoop” 和类型(r2)=“蜂巢”返回n,计数(n)

这应该做到:

start n=node(*) match ()-[:Hadoop]-(n)-[:hive]-() return n,count(n)

你可以这样做

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

它将为你提供你所期待的。最好是在匹配中设置条件,而不是在where子句中设置条件。

首先,查询没有结果的原因是因为where type(r)=“Hadoop”和type(r)=“hive”部分说您正在寻找一个r实例,其中r.type=“Hadoop”和“hive”同时出现。由于r.type在任何时候只能有一个值,因此它不可能同时等于Hadoop和Hive;因此,该语句可以在逻辑上简化为“where false”,或者基本上删除所有匹配项

如果要查找具有任一关系的所有节点,那么指定该关系的正确方法是什么

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);
或者,有方向

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