【问题标题】:How to retrieve the nodes with multiple relationships using cypher query如何使用密码查询检索具有多个关系的节点
【发布时间】:2013-03-01 13:37:00
【问题描述】:

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

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

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

这是我正在使用的查询

start n=node(*) match (n)-[r]-() where type(r)="Hadoop" and type(r)="hive" return n,count(n);

此查询返回 0 行。

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

提前致谢。

古斯

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    应该这样做:

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

    【讨论】:

      【解决方案2】:

      我认为您的查询应该是:

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

      【讨论】:

        【解决方案3】:

        你可以这样实现

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

        它将为您提供您所期望的。匹配条件最好放在 where 子句中。

        【讨论】:

          【解决方案4】:

          首先,您的查询没有结果的原因是因为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);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-11-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多