因此,需要对给定节点标签的所有属性的非null和非空值的出现次数进行计数。
比如说,
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
型
查询中需要修改什么?或者我的查询一开始就错了。提前感谢。
2条答案
按热度按时间9lowa7mx1#
如果您从
MATCH
中的Person
节点推断可能的属性,则可以使用以下内容获取非空属性的计数:字符串
请注意,由于Neo4j将null属性视为不存在,因此如果
MATCH
语句返回的节点都不具有该属性,则无法推断出这些属性。CASE
可以很容易地从计数中排除其他属性值。例如,要排除空列表,您可以编写:型
如果您事先知道属性,例如,您知道架构,那么您可以将它们作为一个列表或一组记录提供。例如,如果属性是
'a'
到'g'
,则可以使用以下内容:型
isr3a4wc2#
[已删除]
像
COUNT
这样的Aggregating functions已经被像key
这样的非聚合表达式分组,所以不需要DISTINCT
。与NULL
的比较被认为是false
乘以WHERE
,所以显式的NULL
测试是多余的。下面是一个使用的查询:
""
、[]
或{}
值)。true
)或0。它还将为始终为空的属性返回
0
计数。字符串
您应该分析您的问题的建议答案中的查询,看看哪一个使用最少的DB命中。
此外,如果有意义的话,你应该考虑删除所有具有空字符串值的属性,如果它们应该被认为是不存在的。这将允许你使用更简单和更快的查询。