【问题标题】:Cypher query to get all the labels that have more than 2 nodes密码查询以获取具有超过 2 个节点的所有标签
【发布时间】:2014-07-26 09:04:41
【问题描述】:

我有一个图表,其中每个连接的组件都有一个特定的标签,比如 comp1、comp2 等。我想做一个密码查询,返回所有具有多个节点的标签。 我得到了这样的所有标签:

match (n) return labels(n)

所以我尝试做这样的事情,以便只获得我需要的标签:

match (n) with labels(n) as lb where count(k:lb[0]) >= 2)  return lb limit 10

但我得到一个语法错误:

无效输入')':预期数字、'.'、'E'、空格、节点标签、 '[', "=~", IN, IS, '*', '/', '%', '^', '+', '-', '', "=", '=', "", "!=", AND, XOR, OR, LOAD CSV, START, MATCH, UNWIND, MERGE, 创建、设置、删除、删除、FOREACH、与、返回、联合、';'或结束 输入(第 1 行,第 57 列)

我还想按具有该标签的节点数对标签进行排序...

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    使用 2.1

    match (n) 
    unwind labels(n) as l
    with l,count(*) as cnt
    where cnt > 2
    return l
    

    【讨论】:

      【解决方案2】:

      如果您使用 Neo4j 2.0 版执行此操作,您可以使用此密码查询实现您想要的:

          Start n=node(*)
          match (n)-->() with n,count(*) as rel_cnt where rel_cnt >= 2 return n;
      

      但请注意,此查询将横穿整个图表,因此,将其限制为某些标签可能是个好主意。干杯。

      更新

      我将问题视为具有超过 1 个关系的节点,我的错。此查询不会执行 OP 要求的操作。

      【讨论】:

      • 这个答案被标记为接受,但据我所知,它与问题无关。 OP 询问如何过滤标签计数,这个查询甚至不包含标签。而且,鉴于您所说的是 Neo4j 2.0,因此不需要 start 子句。
      • 正确。我把这个问题读作 relation 计数,我的错。此查询不会执行 OP 要求的操作。关于版本……没错。您不需要 Start 子句。感谢您指出这一点。我会更新答案以反映这一点。
      • 我已经调整了这个查询来工作:start n=node() match (n)-->() with n,count() as rel_cnt where rel_cnt >= 2 返回标签(n),rel_cnt order by rel_cnt DESC
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多