代码之家  ›  专栏  ›  技术社区  ›  Juliosor

使用键()时,来自同一节点的重复属性

  •  0
  • Juliosor  · 技术社区  · 6 年前

    我尝试从节点及其标签获取所有属性时:

    Query

    如您所见,第一行和第五行属于同一个节点标签,但它们的属性已切换位置。它们看起来是一样的,所以这不是一个区分大小写的问题。

    使用查询

    MATCH (N:INCIDENT) RETURN COUNT(N)
    

    返回 计数(N) 两行的值。

    我正在使用 keys() 要返回属性,值是映射的列表 the properties are structured as 我知道地图本身并不是有序的,但这种做法不符合这一点。

    这就是我创建违规节点的方式:

    Creation

    它应该这样工作吗?如果节点缺少其中一个属性,我会理解副本。

    2 回复  |  直到 6 年前
        1
  •  0
  •   cybersam    6 年前

    由于一个节点可以有多个标签,下面是@logisma第二个查询的更安全版本。它使用APOC功能 apoc.coll.sort 排序 labels keys 集合,以确保不同的标签/键顺序不会影响结果。

    MATCH (n)
    RETURN
      apoc.coll.sort(LABELS(n)) AS labels,
      apoc.coll.sort(KEYS(n)) AS keys,
      COUNT(*);
    
        2
  •  0
  •   logisima    6 年前

    您可以尝试以下查询:

    MATCH (n) 
    WITH labels(n) AS labels, keys(n) AS keys
    UNWIND keys AS key 
    WITH labels, key ORDER BY labels, key
    RETURN labels, collect(DISTINCT key) AS keys, count(*)
    

    但是这个查询会很慢,因为你扫描了所有的节点。。。

    如果你有 APOC公司 ,您也可以使用 apoc.coll.sort(coll) 函数对 keys() 阵列:

    MATCH (n) 
    RETURN labels(n) AS labels, apoc.coll.sort(keys(n)) AS keys, count(*)