我试图在以下情况下使用标签从节点获取所有属性:
如您所见,第一行和第五行属于同一节点标签,但它们的属性已切换位置。它们似乎是相同的,所以它不是一个区分大小写的问题。
使用
查询MATCH (N:INCIDENT) RETURN COUNT(N)
返回两行的 count(N)值的总和。
我正在使用keys()返回属性,该值是地图the properties are structured as的列表。我知道地图本身并没有订购,但这种方式很难理解。
这是我创建违规节点的方式:
它应该像这样工作吗?如果节点缺少其中一个属性,我会理解副本。
答案 0 :(得分:0)
您可以尝试此查询:
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(*)
答案 1 :(得分:0)
由于节点可以有多个标签,因此以下是@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(*);