因此需要统计给定节点标签的所有属性的非空值和非空值的出现次数。
例如,
MATCH(p:Person)
WHERE p.name IS NOT NULL and p.name <> ""
RETURN COUNT(p.name);
这给了我节点标签的名称属性的计数
Person
我必须获取此节点标签的其他 200 个属性的计数。我能够获得属性的计数,但我不确定是否有像上面这样的条件计数。任何事情都会有帮助,因为我刚刚开始学习 neo4j。
我用于所有属性计数的查询是
MATCH(p:Person)
WITH p
UNWIND keys(p) as key
WITH key, COUNT(keys(p)) as cnt
RETURN DISTINCT key, cnt
ORDER BY key
查询中需要修改什么?或者我的查询一开始就是错误的。预先感谢。
需要先过滤掉空字符串:
MATCH (p:Person)
UNWIND [k IN keys(p) WHERE p[k] <> "" | k] AS key
RETURN key, count(*) AS cnt
ORDER BY key
您不需要测试 null 属性,因为 Neo4j 将这些属性视为不存在的属性。并且
DISTINCT
不是必需的,因为 key
是分组键。
这是另一种解决方案。
MATCH (p:Person)
UNWIND KEYS(p) AS key
WITH key
WHERE p[key] <> ""
RETURN key, COUNT(*) AS cnt
ORDER BY key
您应该PROFILE您的问题的建议答案中的查询,看看哪个查询使用的数据库命中率最少。
此外,如果有意义的话,您应该考虑删除所有具有空字符串值的属性(如果它们应被视为不存在)。这将使您的查询更简单、更快。